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 Mon, 29 Oct 2012 14:06:10 GMT
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