So, trunk is finally free from "runtime" ObjRelationships. I kept runtime DbRelationships for now as I don't envision those giving us trouble due to them being based on the same join pairs. And having a graph of DbEntities fully traversable in both directions is kind of important.
The tricky part was to keep one-way to-many working. So I ended up implementing it differently - via graph change tracking instead of runtime relationships that created hidden object properties (see CAY-1861 commits). This code touches on a few non-trial parts of runtime, so I hope I didn't break anything. So appreciate feedback from early adopters. Andrus On Jun 18, 2013, at 5:26 PM, Andrus Adamchik <[email protected]> wrote: > Heh… Runtime relationships were intended to solve a single problem of > updating FK in a one-way to-many relationship. But it created so much trouble > for everyone instead. Things like vertical inheritance for instance… oh well. > > Andrus > > On Jun 18, 2013, at 10:22 AM, John Huss <[email protected]> wrote: > >> For what it's worth, I've had this commented out for quite some time now >> and have been running it in production. It was necessary because my entity >> classes are subclasses of PersistentObject rather than CayenneDataObject >> and they don't have any place to store the generated "runtimeRelationshipX" >> values. >> >> John >> >> >> On Tue, Jun 18, 2013 at 6:21 AM, Andrus Adamchik >> <[email protected]>wrote: >> >>> FYI … another case of runtime rels messing things up. Time to get rid of >>> them, replacing the functionality with some other algorithm. >>> >>> Andrus >>> >>> >>> Begin forwarded message: >>> >>>> --- >>> a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java >>>> +++ >>> b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java >>>> @@ -193,7 +193,7 @@ public class DataDomainProvider implements >>> Provider<DataDomain> { >>>> } >>>> >>>> dataDomain.getEntityResolver().applyDBLayerDefaults(); >>>> - dataDomain.getEntityResolver().applyObjectLayerDefaults(); >>>> + //dataDomain.getEntityResolver().applyObjectLayerDefaults(); >>>> >>>> for (DataNodeDescriptor nodeDescriptor : >>> descriptor.getNodeDescriptors()) { >>>> DataNode dataNode = new DataNode(nodeDescriptor.getName()); >>>> >>>> >>>> Feel free to create a custom DataDomainProvider with this change and >>> bind it via DI... On the Cayenne end we'll probably need to get rid of >>> "runtime" obj relationships. But that's something that will require more >>> research. >>> >>> > >
