cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felipe Martín Santos <gadita...@gmail.com>
Subject Re: Possible bug in cayene 3.0.2 to set relationships???
Date Wed, 31 Oct 2012 09:59:41 GMT
Good Morning Andrus!!

I've reopened the thread
https://issues.apache.org/jira/browse/CAY-1751because now the problem
is when I try to get one record (inserted
previously)... I test and <ObjectId:TreeType, CODE_TYPE_TREE=1> is in
database.

Perhaps this is a foreign key (unique) bug??

Thank you for your answer.

Best Regards!!



2012/10/29 Felipe Martín Santos <gaditaman@gmail.com>

> Ok, I've tested with both: the proposed example and my real code... Now I
> can insert records in the database. :-) Thank you very very very much....
>
> But now I've a problem when I get a FruiTree Object from the database. If
> I navigate to Enclosure.... There's not a problem, but when I navigate to
> TreeTypes.... ERROR oooooops!!
>
> Here the code!!
>
> SelectQuery treeQuery = new SelectQuery("FruitTree");
> List<DataObject> trees = context.performQuery(treeQuery);
>
> DataObject tree = trees.get(0);
>
> DataObject enclosure = (DataObject)tree.readProperty("toEnclosure");
> Object description = enclosure.readProperty("descriptionEnclosure");
>
> DataObject treeType = (DataObject)tree.readProperty("toTreeType");
> *Object codeTreeType = treeType.readProperty("codeTypeTree");* // here
> comes the error
> Object descriptionTreeType = treeType.readProperty("descriptionTypeTree");
>
>
> *org.apache.cayenne.FaultFailureException: [v.3.0.2 Jun 11 2011 09:26:09]
> Error resolving fault for ObjectId: <ObjectId:TreeType, CODE_TYPE_TREE=1>
> and state (hollow). Possible cause - matching row is missing from the
> database.
>     at
> org.apache.cayenne.BaseContext.prepareForAccess(BaseContext.java:171)
>     at
> org.apache.cayenne.CayenneDataObject.readProperty(CayenneDataObject.java:219)
>     at
> org.apache.cayenne.CayenneDataObject.readSimpleProperty(CayenneDataObject.java:203)
>     at
> org.apache.cayenne.CayenneDataObject.readNestedProperty(CayenneDataObject.java:132)
>     at
> org.apache.cayenne.CayenneDataObject.readNestedProperty(CayenneDataObject.java:154)
>     at
> es.juntadeandalucia.agapa.gis.ide.dataset.sigpac.test.FruitTest.test(FruitTest.java:150)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>     at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>     at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>     at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>     at
> org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
>     at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
>     at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
>     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>     at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>     at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
>     at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>     at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>     at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>     at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>     at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>
>
> *
>
> 2012/10/25 Andrus Adamchik <andrus@objectstyle.org>
>
>> So I attached the mapping that I was talking about to CAY-1751. It works
>> for me on Derby. Here is the diff of changes to make the key propagate:
>>
>>
>> diff --git a/src/main/resources/FieldDomainMap.map.xml
>> b/src/main/resources/FieldDomainMap.map.xml
>> index e76fd96..530f8b2 100644
>> --- a/src/main/resources/FieldDomainMap.map.xml
>> +++ b/src/main/resources/FieldDomainMap.map.xml
>> @@ -14,7 +14,7 @@
>>                 </db-key-generator>
>>         </db-entity>
>>         <db-entity name="FRUIT_TREES">
>> -               <db-attribute name="CODE_TYPE_TREE" type="NUMERIC"
>> isMandatory="true" length="3"/>
>> +               <db-attribute name="CODE_TYPE_TREE" type="NUMERIC"
>> isPrimaryKey="true" isMandatory="true" length="3"/>
>>                 <db-attribute name="ID_ENCLOSURE" type="NUMERIC"
>> isMandatory="true" length="12"/>
>>                 <db-attribute name="ID_FRUIT_TREES" type="NUMERIC"
>> isPrimaryKey="true" isMandatory="true" length="12"/>
>>                 <db-attribute name="PLANTING_DATE" type="DATE"
>> isMandatory="true"/>
>> @@ -24,7 +24,7 @@
>>                 </db-key-generator>
>>         </db-entity>
>>         <db-entity name="TREE_TYPES">
>> -               <db-attribute name="CODE_TYPE_TREE" type="NUMERIC"
>> isMandatory="true" length="3"/>
>> +               <db-attribute name="CODE_TYPE_TREE" type="NUMERIC"
>> isPrimaryKey="true" isMandatory="true" length="3"/>
>>                 <db-attribute name="DESCRIPTION_TYPE_TREE" type="VARCHAR"
>> length="30"/>
>>                 <db-attribute name="ID_TREE_TYPE" type="NUMERIC"
>> isPrimaryKey="true" isMandatory="true" length="12"/>
>>                 <db-key-generator>
>> @@ -51,7 +51,7 @@
>>         <db-relationship name="toTreeType" source="FRUIT_TREES"
>> target="TREE_TYPES" toMany="false">
>>                 <db-attribute-pair source="CODE_TYPE_TREE"
>> target="CODE_TYPE_TREE"/>
>>         </db-relationship>
>> -       <db-relationship name="toFruitTree" source="TREE_TYPES"
>> target="FRUIT_TREES" toMany="true">
>> +       <db-relationship name="toFruitTree" source="TREE_TYPES"
>> target="FRUIT_TREES" toDependentPK="true" toMany="true">
>>                 <db-attribute-pair source="CODE_TYPE_TREE"
>> target="CODE_TYPE_TREE"/>
>>         </db-relationship>
>>         <obj-relationship name="toFruitTree" source="Enclosure"
>> target="FruitTree" db-relationship-path="toFruitTree"/>
>> --
>>
>> On Oct 23, 2012, at 7:50 PM, Felipe Martín Santos <gaditaman@gmail.com>
>> wrote:
>>
>> > Ok Andrus, I've discovered how attach files...
>> >
>> > When you have a free moment, check it out please, if you have troubles
>> > understanding something... ask me!!
>> >
>> > Best regards!!
>> >
>> > 2012/10/23 Felipe Martín Santos <gaditaman@gmail.com>
>> >
>> >> Muchísimas gracias Andrus!!
>> >>
>> >> I've created https://issues.apache.org/jira/browse/CAY-1751
>> >>
>> >> is possible upload a file? or I must write the code in the Description
>> >> Frame??
>> >>
>> >>
>> >>
>> >>
>> >> 2012/10/23 Andrus Adamchik <andrus@objectstyle.org>
>> >>
>> >>>> Andrus, you can test this probleme if you have a similar example
>> (more
>> >>> or
>> >>>> less), and check what I say.
>> >>>
>> >>>
>> >>> Yes, if you can provide a mapping project demonstrating an issue (no
>> need
>> >>> for Java classes), I'll take a look. Feel free to use our Jira for
>> that:
>> >>>
>> >>> https://issues.apache.org/jira/browse/CAY
>> >>>
>> >>> Andrus
>> >>>
>> >>>
>> >>> On Oct 23, 2012, at 2:57 PM, Felipe Martín Santos <
>> gaditaman@gmail.com>
>> >>> wrote:
>> >>>
>> >>>> Sorry but doesn' work :-(
>> >>>>
>> >>>> MY RELATIONSHIPS:
>> >>>>
>> >>>> <db-relationship name="toUse" source="ENCLOSURE" target="USE"
>> >>>> toMany="false">
>> >>>> <db-attribute-pair source="CD_USE" target="CD_USE"/>
>> >>>> </db-relationship>
>> >>>>
>> >>>> <db-relationship name="toPieceOfGround" source="ENCLOSURE"
>> >>>> target="PIECE_OF_GROUND" toMany="false">
>> >>>> db-attribute-pair source="ID_PIECE_OF_GROUND"
>> >>> target="ID_PIECE_OF_GROUND"/>
>> >>>> </db-relationship>
>> >>>>
>> >>>> <obj-relationship name="toPieceOfGround" source="Enclosure"
>> >>>> target="PieceOfGround" deleteRule="Nullify"
>> >>>> db-relationship-path="toPieceOfGround"/>
>> >>>>
>> >>>> <obj-relationship name="toUse" source="Enclosure" target="Use"
>> >>>> deleteRule="Nullify" db-relationship-path="toUse"/>
>> >>>>
>> >>>> *********************************************
>> >>>> THE CODE FOR INSERT (We use Generic Persistent Class of Cayenne)
>> >>>>
>> >>>> Expression exp = ExpressionFactory.matchExp("idPieceOfGround",
>> >>> "123673");
>> >>>> SelectQuery query = new SelectQuery("PieceOfGround", exp);
>> >>>> List<DataObject> pieceOfGround = context.performQuery(query);
>> >>>>
>> >>>> exp = ExpressionFactory.matchExp("cdUse", 5990403);
>> >>>> query = new SelectQuery("Use", exp);
>> >>>> List<DataObject> use = context.performQuery(query);
>> >>>>
>> >>>> DataObject enclosure = new CayenneDataObject();
>> >>>> enclosure.setObjectId(new ObjectId("Enclosure"));
>> >>>>
>> >>>> // Set de DataObject for the relationships
>> >>>> enclosure.writeProperty("toPieceOfGround", pieceOfGround.get(0));
>> >>>> enclosure.writeProperty("toUse", use.get(0));
>> >>>>
>> >>>> context.registerNewObject(arbol);
>> >>>> context.commitChanges();
>> >>>>
>> >>>> *************************************
>> >>>> MY CONCLUSIONS
>> >>>>
>> >>>> cayenne context.commitChanges()  builds automatically the insert:
>> >>>>
>> >>>> * ID_PIECE_OF_GROUND is pk in PIECE_OF_GROUND: when I do
>> >>>> enclosure.writeProperty("toPieceOfGround", pieceOfGround.get(0)),
in
>> the
>> >>>> commit moment, cayenne can extract automatically the
>> ID_PIECE_OF_GROUND
>> >>> for
>> >>>> the pieceOfGround DataObject, and put this value as insert parameter.
>> >>>>
>> >>>> * CD_USE is NOT  pk in USE: when I do
>> enclosure.writeProperty("toUse",
>> >>>> use.get(0)), in the commit moment, cayenne CAN´T extract
>> automatically
>> >>> the
>> >>>> CD_USE for the use DataObject, and can´t put this value as insert
>> >>> parameter.
>> >>>>
>> >>>> I think the problem is that, "a bug" or a cayenne design issue not
>> >>> taken.
>> >>>>
>> >>>>
>> >>>
>> ****************************************************************************
>> >>>>
>> >>>> In the db-entity PIECE_OF_GROUND I can't put
>> >>>> <db-attribute name="CD_USE" type="VARCHAR" isMandatory="true"
>> >>> length="2">
>> >>>> as PK, because its PK is ID_PIECE_GROUND (Autogenerated by cayenne
>> with
>> >>> an
>> >>>> Oracle sequence) and if I include CD_USE as PK cayenne fails
>> >>>> (org.apache.cayenne.CayenneRuntimeException: [v.3.0.2 Jun 11 2011
>> >>> 09:26:09]
>> >>>> Primary Key autogeneration only works for a single attribute.).
>> >>>>
>> >>>> I've tried all the possible combinations tha you've said me, but
none
>> >>> works
>> >>>> :-)
>> >>>>
>> >>>> Andrus, you can test this probleme if you have a similar example
>> (more
>> >>> or
>> >>>> less), and check what I say.
>> >>>>
>> >>>> Thank you very much for your attention!!
>> >>>
>> >>>
>> >>
>>
>>
>

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