Re: [JIRA] Commented: (CAY-811) Meaningful identity columns: user provided PK values are ignored

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Thu Aug 02 2007 - 07:58:42 EDT

  • Next message: Andrus Adamchik: "Re: PostgreSQL sequences revisited"

    Tore,

    let me take this to the list, as it would be much easier to follow
    the discussion compared to Jira comments. First, this is indeed a
    separate issue from CAY-811 main problem, as it has nothing to do
    with database generated PK.

    Now that you posted a patch below I remember why it was done this way
    - to support PK generation for primitive int attributes, required by
    JPA (and our POJO feature). Now I guess we'll need to figure out a
    way in DataDomainInsertBucket to tell apart meaningful primitives vs.
    java.lang.Number subclasses. Otherwise the patch below would break JPA.

    Andrus

    On Aug 2, 2007, at 2:36 PM, Tore Halset (JIRA) wrote:

    >
    > [ https://issues.apache.org/cayenne/browse/CAY-811?
    > page=com.atlassian.jira.plugin.system.issuetabpanels:comment-
    > tabpanel#action_12430 ]
    >
    > Tore Halset commented on CAY-811:
    > ---------------------------------
    >
    > This small patch fixes my issue (int meaningful primary key *not*
    > marked as generated). Is it the same as your 1) in the description
    > above? I would love to commit it, but I do not know why the special
    > handling of a Number with the intValue 0 was added?
    >
    > Index: framework/cayenne-jdk1.4-unpublished/src/main/java/org/
    > apache/cayenne/access/DataDomainInsertBucket.java
    > ===================================================================
    > --- framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
    > cayenne/access/DataDomainInsertBucket.java (revision 562071)
    > +++ framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
    > cayenne/access/DataDomainInsertBucket.java (working copy)
    >.. -144,11 +144,8 @@
    > .readPropertyDirectly(object);
    >
    > if (value != null) {
    > - // treat numeric zero values as nulls
    > requiring generation
    > - if (!(value instanceof Number && ((Number)
    > value).intValue() == 0)) {
    > - idMap.put(dbAttrName, value);
    > - continue;
    > - }
    > + idMap.put(dbAttrName, value);
    > + continue;
    > }
    > }
    >
    >
    >
    >> Meaningful identity columns: user provided PK values are ignored
    >> ----------------------------------------------------------------
    >>
    >> Key: CAY-811
    >> URL: https://issues.apache.org/cayenne/browse/CAY-811
    >> Project: Cayenne
    >> Issue Type: Bug
    >> Components: Cayenne Core Library
    >> Affects Versions: 1.2 [STABLE], 2.0 [STABLE], 3.0
    >> Reporter: Andrus Adamchik
    >> Assignee: Andrus Adamchik
    >> Priority: Minor
    >> Fix For: 3.0
    >>
    >>
    >> I found it when testing on 3.0, although I suspect this is a
    >> problem on 2.0 and 1.2 as well. When a meaningful PK is set by the
    >> user and is also mapped as a DB-generated PK, Cayenne incorrectly
    >> overrides user value. There are two places where this must be fixed:
    >> 1. DataDomainInsertBucket (I will commit the fix shortly)
    >> 2. InsertBatchQueryBuilder (this is a bit more hairy - as the
    >> batch syntax will be affected depending on whether user provided
    >> a value or not)
    >
    > --
    > 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 : Thu Aug 02 2007 - 07:59:07 EDT