[JIRA] Created: (CAY-747) Inserting new record in table with PK columns of UUID and trigger to generate new UUIDs

From: JIRA (Heino)
Date: Wed Feb 07 2007 - 15:29:49 EST

  • Next message: Marcin Skladaniec (JIRA): "[JIRA] Created: (CAY-748) many to many and objects in different context"

    Inserting new record in table with PK columns of UUID and trigger to generate new UUIDs
    ---------------------------------------------------------------------------------------

                     Key: CAY-747
                     URL: https://issues.apache.org/cayenne/browse/CAY-747
                 Project: Cayenne
              Issue Type: Improvement
              Components: Cayenne Core Library
        Affects Versions: 2.0 [STABLE]
             Environment: Windows XP, NetBeans 5.0, MySQL 5.0
                Reporter: Heino Grøndahl Sørensen
                Priority: Minor

    I have a table with a primary key column containing UUIDs, represented as strings in the database.
    I have added a trigger on before insert to create a new UUID, using the UUID() function.
    I have set the PK Generation Stategy to Database-Generated and the Auto-incremented is set to the name of the column.
    When I insert a new record into the table I get an exception on commitChanges.
    Here is an bit of the stack trace.

    org.apache.cayenne.CayenneRuntimeException: [v.2.0.2 January 14 2007] One and only one PK row is expected, instead got 0
            at org.apache.cayenne.access.DataDomainFlushObserver.nextGeneratedDataRows(DataDomainFlushObserver.java:87)
            at org.apache.cayenne.access.DataNodeQueryAction.nextGeneratedDataRows(DataNodeQueryAction.java:79)
            at org.apache.cayenne.access.jdbc.BatchAction.processGeneratedKeys(BatchAction.java:265)
            at org.apache.cayenne.access.jdbc.BatchAction.runAsIndividualQueries(BatchAction.java:208)
            at org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.java:81)
            at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:59)
            at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
            at org.apache.cayenne.access.DataDomainFlushAction.runQueries(DataDomainFlushAction.java:219)
            at org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:141)
            at org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:794)
            at org.apache.cayenne.access.DataDomain$2.transform(DataDomain.java:765)
            at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:820)
            at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:762)
            at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1226)
            at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1130)

    If I look in the actual table in the database, the record is there (!).
    Seems like the trigger-assigned UUID is not read from the database.

    -- 
    This message is automatically generated by JIRA.
    -
    You can reply to this email to add a comment to the issue online.
    



    This archive was generated by hypermail 2.0.0 : Wed Feb 07 2007 - 15:31:34 EST