Hi,

I suggest to mark the UNIQUE field as "PK" in the Modeler even if it is not (in 
addition to the actual PK). And then check "to dep PK" on the relationship. 
This is not a bug per se, but rather an annoyance...

Andrus

On Oct 22, 2012, at 1:28 PM, Felipe Martín Santos <[email protected]> wrote:

> We work with Cayenne 3.0.2 and we handle the PK with Cayenne Generated PK
> (an Oracle Sequence).
> 
> The tables are as follows (To abbreviate, I don’t included the sequence
> name)
> 
> 
> 
> <db-entity name=*"ENCLOSURE"* schema=*"FIELD"*>
> 
> <db-attribute name=*"ID_RECINTO"* type=*"NUMERIC"* isPrimaryKey=*"true"*
> isMandatory=*"true"* length=*"12"*/>
> 
>      <db-attribute name=*"CD_USE"* type=*"VARCHAR"* isMandatory=*"true"*
> length=*"2"*/>
> 
>      <db-attribute name=*"ID_PIECE_OF_GROUND"* type=*"NUMERIC"* length=*
> "12"*/>
> 
> </db-entity>
> 
> 
> 
> 
> 
> 
> 
> <db-entity name=*"USE"* schema=*"FIELD"*>
> 
>            <db-attribute name=*"ID_USO_SIGPAC"* type=*"NUMERIC"*
> isPrimaryKey=*"true"* isMandatory=*"true"* length=*"12"*/>
> 
>            <db-attribute name=*"CD_USE"* type=*"VARCHAR"* isMandatory=*
> "true"* length=*"2"*/>  /* Isn’t PK but is UNIQUE */
> 
>            <db-attribute name=*"DS_USE"* type=*"VARCHAR"* isMandatory=*
> "true"* length=*"50"*/>
> 
> </db-entity>
> 
> 
> 
> 
> 
> <db-entity name=*"PIECE_OF_GROUND"* schema=*"FIELD"*>
> 
>            <db-attribute name=*"ID_PIECE_OF_GROUND"* type=*"NUMERIC"*
> isPrimaryKey=*"true"* isMandatory=*"true"* length=*"12"*/>
> 
>            <db-attribute name=*"DS_PIECE_OF_GROUND"* type=*"VARCHAR"*
> isMandatory=*"true"* length=*"50"*/>
> 
> </db-entity>
> 
> 
> 
> <db-relationship name=*"toUse"* source=*"ENCLOSURE"* target=*"USE"* toMany=*
> "false"*>
> 
>            <db-attribute-pair source=*"CD_USE"* target=*"CD_USE"*/>
> 
> </db-relationship>
> 
> 
> 
> <db-relationship name=*"toField"* source=*"ENCLOSURE"* target=*
> "PIECE_OF_GROUND"* toMany=*"false"*>
> 
>            <db-attribute-pair source=*"ID_PIECE_OF_GROUND"* target=*
> "ID_PIECE_OF_GROUND"*/>
> 
> </db-relationship>
> 
> 
> 
> 
> 
> The PIECE_OF_GROUND PK is the ENCLOSURE FK (ID_PIECE_OF_GROUND)
> 
> The USE is a parametric table. The CD_USE  isn’t PK, but it’s UNIQUE, and
> we use this for the relationship with  the CD_USE FK in the ENCLOSURE table.
> 
> 
> 
> When we create a new Enclosure object, we perform the following steps:
> 
> 
> 
> 1. Create and register a new Enclosure object in our Cayenne DataContext.
> 
> 2. Retrieve from the database an  “Use” DataObject, an setUse in the
> Enclosure Object
> 
> 3. Retrieve from  the database an “PieceOfGround” DataObject and
> setPieceOfGround in the Enclosure Objet.
> 
> 
> 
> When I commit against the database, we get the next error:
> 
> 
> 
> org.apache.cayenne.CayenneRuntimeException: [v.3.0.2 Jun 11 2011 09:26:09]
> 
> Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: can
> not perform an insert  NULL en ("FIELD"."USE"."CD_USE")
> 
> 
> The problem is: if I relate two tables with the pair FK-PK Cayenne works
> well (ex: the ID_PIECE_OF_GROUND has an value for the INSERT), but if the
> relationship is between FK-(An UNIQUE field), cayenne can’t extract de
> value (ex: the CD_USE is null for the INSERT) . How it’s possible?? It’s a
> bug?

Reply via email to