PK generation problem: uniqueness constraint violated

From: Török Péte (torok..llround.net)
Date: Tue Aug 07 2007 - 10:55:49 EDT

  • Next message: Alexander Lamb (dev): "Re: [POLL]: Cayenne 3.0 -- Java 1.4 or 5 support?"

    Hello,
    I have a small application with an Oracle DB schema containing a single sequence, to be used by all tables (there aren't many of them). The sequence is created with this code:
     
    CREATE SEQUENCE MY_SEQ

    INCREMENT BY 1

    START WITH 1

    MINVALUE 1

    MAXVALUE 999999999999999999999999999

    NOCYCLE

    NOORDER

    CACHE 20;

     
    I tried to make Cayenne use this sequence by setting up my DB entities like this:
     
    <db-entity name="CHANGE" schema="MY_SCHEMA">

        ...

        <db-key-generator>

            <db-generator-type>ORACLE</db-generator-type>

            <db-generator-name>MY_SEQ</db-generator-name>

            <db-key-cache-size>1</db-key-cache-size>

        </db-key-generator>

    </db-entity>

    (On the GUI, I selected "Custom Sequence" as PK Generation Strategy.)
    Now, at some point in my app, I am about to create new Change data objects (with DataContext.newObject()). All is fine as long as there is no more than 20 of them. But when there is more than 20, I get the following error at commit:
     
    org.apache.cayenne.CayenneRuntimeException: [v.2.0.3 May 6 2007] Commit Exception
            at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1254)
            at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1130)
            ...
    Caused by: java.sql.SQLException: ORA-00001: unique constraint (MY_SCHEMA.CHANG_PK) violated
     
    (PK is a primary key constraint.)
    The "CACHE 20" in the sequence looked immediately suspicious, s I tried to modify it to 50, then to change it to NOCACHE, but it made no difference.
    I also tried to change the "Cached PK size" parameter in the Modeler (originally it was 0, but I saw that this resulted in a generated SQL statement INCREMENT BY 20, which didn't look consistent with the actual definition of the sequence above, so I changed the parameter to 1).
    I am using Cayenne 2.0.3 and Oracle 9.2.
    Any clues to what is the cause and how to fix (or avoid) the problem?
    Thanks in advance,
    Peter
     



    This archive was generated by hypermail 2.0.0 : Tue Aug 07 2007 - 10:56:23 EDT