Thanks for all your comments. I decided to do the "Mike-Way" below and to unflatten my stuff :-)
Cheers! Christian On Fri, Feb 18, 2011 at 2:37 PM, Mike Kienenberger <mkien...@gmail.com> wrote: > You can also fake your own flattened attribute by writing > "Apple.getPlum()" and "Plum.getApple()" yourself using the > intermediate entity. > > On Fri, Feb 18, 2011 at 5:18 AM, Robert Zeigler > <robert.zeig...@roxanemy.com> wrote: >> You can access the intermediate object if you choose not to flatten the >> relationship. There's nothing to prevent a join table from being >> represented as its own entity in cayenne. It can make your application a >> little more complicated, but I've done it before when the join table carries >> additional meaningful information, eg, information that somehow modulates >> the join (eg: creating a createDate column on the join table for keeping >> track of exactly when the association was created... stuff like that). >> >> Cheers, >> >> Robert >> On Feb 18, 2011, at 2/184:10 AM , Christian Grobmeier wrote: >> >>>> What semantically is "isFresh" attribute? Is it a some business logic >>>> attibute, or simple "autoset" variable, like timestamp etc.? >>> >>> No its business logic. In fact it defines the view-rights for the >>> specific apples to the plums :-) >>> >>>> If former, you cannot live without ApplePlum ObjEntity. Is the problem >>>> then in just setting its default value? Then you can simply set it at >>>> database level. >>> >>> OK, I will try to change my mind on this one. I have hoped I could >>> somehow access the intermediate object. >>> >>> THanks! >>> >>> Cheers >>> Christian >>> >>> >>>> If the default value is dynamic, like timestamp, you can try intercept >>>> Cayenne's generating of queries: >>>> http://cayenne.apache.org/doc30/custom-batchquerybuilder-factory.html >>>> >>>> 2011/2/18 Christian Grobmeier <grobme...@gmail.com>: >>>>> Hello, >>>>> >>>>> I have the following scenario: >>>>> >>>>> Apple 1 -> n ApplePlum n : 1 Plum >>>>> >>>>> I want store an additional flag in ApplePlum (lets say isFresh = >>>>> true/false >>>>> >>>>> How can I do this? I know I should not use flattened relations, but >>>>> they are so nice, I would like to keep them. At least it would lead to >>>>> the Method getApplePlum->getPlum which is not very neat. >>>>> >>>>> In order to do so I have thought I could create a custom method in my >>>>> Apple class, which copies some code from the _Apple class. >>>>> >>>>> Like this: >>>>> >>>>> public void addToAppleAsFreshPlum(Plum value) { >>>>> String relName = "ApplePlum"; >>>>> if (value == null) { >>>>> throw new NullPointerException("Attempt to add null target >>>>> DataObject."); >>>>> } >>>>> >>>>> willConnect(relName, value); >>>>> Object holder = readProperty("ApplePlum"); >>>>> >>>>> // Now I would like to get the object created by the holder: >>>>> ((ApplePlum)holder).setFresh(true); >>>>> >>>>> getObjectContext().propertyChanged(this, relName, null, value); >>>>> >>>>> if (holder instanceof Collection) { >>>>> ((Collection<Object>) holder).add(value); >>>>> } >>>>> else if (holder instanceof Map) { >>>>> ((Map<Object, Object>) holder).put(getMapKey(relName, >>>>> value), value); >>>>> } >>>>> >>>>> setReverseRelationship(relName, value); >>>>> } >>>>> >>>>> Of course this does not work. I wonder if there is another option for >>>>> me? Any ideas? >>>>> >>>>> Thanks in advance >>>>> Christian >>>>> >>>> >>>> >>>> >>>> -- >>>> Andrey >>>> >>> >>> >>> >>> -- >>> http://www.grobmeier.de >> >> > -- http://www.grobmeier.de