cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "mr.abanjo" <mr.aba...@gmail.com>
Subject Re: Get PK value of a previously generated object
Date Tue, 10 Aug 2010 11:37:11 GMT
Hi,
in the meanwhile i tried to map the relation between the two objects, but
when i commit i receive this error:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0,
Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at java.util.Collections$UnmodifiableList.get(Unknown Source)
at
org.apache.cayenne.map.ObjRelationship.isToDependentEntity(ObjRelationship.java:259)
at
org.apache.cayenne.map.ObjRelationship.isSourceIndependentFromTargetChange(ObjRelationship.java:252)
at
org.apache.cayenne.CayenneDataObject.validateForSave(CayenneDataObject.java:587)
at
org.apache.cayenne.CayenneDataObject.validateForInsert(CayenneDataObject.java:658)
at
org.apache.cayenne.access.ObjectStoreGraphDiff.validateAndCheckNoop(ObjectStoreGraphDiff.java:100)
at
org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1217)
at
org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1138)

I think that the error is located at this line:

public boolean isToDependentEntity() {
      return ((DbRelationship)
getDbRelationships().get(0)).isToDependentPK();
}

..seems that cayenne don't know the relation but i've configured it in a
datamap:

<db-relationship name="relationname" source="ChildDBEntity"
target="MainDBEntity" toMany="false">
<db-attribute-pair source="mainid" target="id"/>
</db-relationship>
<obj-relationship name="relationname" source="ChildOBJEntity"
target="MainOBJEntity" deleteRule="Nullify"
db-relationship-path="relationname"/>

Thanks for any support.

Davide



On Tue, Aug 10, 2010 at 10:46 AM, mr.abanjo <mr.abanjo@gmail.com> wrote:

> Hi Mike,
> if i understand correctly i must configure in cayenne datamap xml file the
> relation between the two objects, and than declare an attribute in the main
> object that contains the "child".
> I know that this is the best way ( if i want to model a database the
> relations must be declared ) but why with the DataObjectUtils i don't
> receive the value?
> There is something i do in a wrong way?
>
> Thanks
> Davide
>
> P.S. I wrote this code in a wrong way in my previous email :
>
> DataContext...registerNewObject(MainObject);
>
> Obviously the "MainObject" is the isntance and not the class :-)
>
>
>
>
> On Mon, Aug 9, 2010 at 6:18 PM, Mike Kienenberger <mkienenb@gmail.com>wrote:
>
>> It's actually much easier than that.
>>
>>
>> // Create main object
>> // Create child object
>>
>> mainObj.setChild(childObj);
>>
>> This will automatically set the correct PK and FK values.
>>
>> You can also commit both changes at the same time rather than separately.
>>
>> On Mon, Aug 9, 2010 at 12:11 PM, mr.abanjo <mr.abanjo@gmail.com> wrote:
>> > Hi,
>> > my application need to generate a "parent" object and then create a
>> "child"
>> > object that contains the PK value of the parent.
>> > I'm using MySQL and the colum "id" is "autoincrement". ( both tables )
>> >
>> > So first i create the main object (it extends DataObject ):
>> >
>> > MainObject mainObj = new MainObject();
>> > //setting properties... without id.. it's generated by mysql
>> > mainObj.set......
>> > ....
>> > ...
>> > DataContext...registerNewObject(MainObject);
>> > DataContext...commitChanges();
>> >
>> > The record is succesfully inserted in the database!
>> >
>> > Then i need to get the PK... in this case a single column ( Long ).
>> >
>> > If i insepct the corresponding filed it is empty, so i see in the
>> > documentation that there are two ways to perform this task:
>> > http://cayenne.apache.org/doc30/accessing-pk-and-fk-values.html
>> > public Long getMainObjectId() {
>> > return (getObjectId() != null && !getObjectId().isTemporary()) ? (Long)
>> > getObjectId().getIdSnapshot().get(ID) : null;
>> > }
>> >
>> > http://cayenne.apache.org/doc30/dataobjectutils.html
>> > long myId = (Long)DataObjectUtils.pkForObject(MainObject);
>> >
>> >
>> > but, with both techniques the value returned is "null"!
>> >
>> > What is wrong?
>> >
>> > Thansk for support.
>> >
>> > Davide
>> >
>>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message