Have you tried calling em.flush() in between the operations to try to
isolate the problem? Are you certain that the collections are being
set up correctly (i.e., that you're not somehow sharing the same
collection among multiple instances)? It might be useful to print out
the System.identityHashCode() of the collection instances just prior
to flush / commit.

-Patrick

On Jan 2, 2008 9:48 PM, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote:
> Sorry - there are a few minor errors in my interpretation, which
> doesn't change my problem.  Commments inline :
>
>
> On Jan 3, 2008, at 12:08 AM, Geir Magnusson Jr. wrote:
>
> > I can't figure out what I'm doing wrong.
> >
> > I'm using joined inheritance and have as my base table InventoryItem
> > with Agent and Contributor as subclasses / tables.
> >
> > I also have a mapping table called Show2Contributor :
> >
> > mysql> describe Show2Contributor;
> > +---------------+------------------+------+-----+---------+-------+
> > | Field         | Type             | Null | Key | Default | Extra |
> > +---------------+------------------+------+-----+---------+-------+
> > | showId        | int(11) unsigned | NO   | PRI |         |       |
> > | contributorId | int(11) unsigned | NO   | PRI |         |       |
> > +---------------+------------------+------+-----+---------+-------+
> >
> > where each Show then has some set of contributors, with each
> > contributor containing an agent (and a static thing called a
> > RoleCode, whic is irrelevant).
> >
> > Now, I have a weird problem.  I'm trying to add 3 Contributors to a
> > Show.  2 already are mapped (one will stay, one will not).  Two have
> > to be created new and added....
> >
> > To create the first new contributor, we happen toneed to add a new
> > agent :
> >
> > 2947 TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 16400155 INSERT INTO InventoryItem (uuid,
> > itemType, name, coId, publicId, damId, ownerId, creationDate,, ...
> > 2948  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 11750977 SELECT LAST_INSERT_ID()
> > 2949  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 10285791 INSERT INTO Agent (id, commonName)
> > VALUES (?, ?) [params=(int) 194591, (String) Geir Magnusson Jr.]
> >
> > so there it creates a new Agent by making the InventoryItem first,
> > getting the autogen ID, and using that to add to the Agent table.
> >
> > Then it makes a new contributor, using that Agent (id=194591) :
> >
> > 2959  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 14647551 INSERT INTO InventoryItem (uuid,
> > itemType, name, coId, publicId, damId, ownerId, creationDate, ...
> > 2997  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 1112653 SELECT LAST_INSERT_ID()
> > 2997  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 4592108 INSERT INTO Contributor (id, roleCode,
> > agentId) VALUES (?, ?, ?) [params=(int) 194592, (int) 109, (int)
> > 194591]
> >
> > Fine - so we have a new contributor, id = 194592, with the new agent
> > (id=194591)
> >
> > Now, remove from the mapping table the Contributor that we don't
> > need :
>
> Sorry - clearly this is just dumping the old mapping entries for the
> show, id = 13163.
>
> >
> > 3094  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 15955745 DELETE FROM Show2Contributor WHERE
> > showId = ? [params=(int) 13163]
> >
> > Now create another Contributor (using an agent we already have) :
> >
> > 3096  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 15187341 INSERT INTO InventoryItem (uuid,
> > itemType, name, coId, publicId, damId, ownerId, creationDate,...
> > 3122  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 9887497 SELECT LAST_INSERT_ID()
> > 3123  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 9788885 INSERT INTO Contributor (id, roleCode,
> > agentId) VALUES (?, ?, ?) [params=(int) 194593, (int) 109, (int)
> > 194573]
> >
> > So that's the 2nd new Contributor (id=194593)
> >
> > To review - two new contributors : 194592 and 194593.  The third is
> > an old, existing one (happens to be 13163)
> >
> > Now, OpenJPA then updates a lastModDate for each of the three :
> >
> This is an update of the show we're going to map to.
>
>
> > 3125  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 12844136 UPDATE InventoryItem SET
> > lastModificationDate = ? WHERE id = ? [params=(Timestamp) 2008-01-02
> > 23:45:48.924, (int) 13163]
>
>
> >
> > 3127  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 13915734 UPDATE InventoryItem SET
> > lastModificationDate = ? WHERE id = ? [params=(Timestamp) 2008-01-02
> > 23:45:48.989, (int) 194591]
> > 3128  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 10653126 UPDATE InventoryItem SET
> > lastModificationDate = ? WHERE id = ? [params=(Timestamp) 2008-01-02
> > 23:45:48.989, (int) 194592]
> >
> > And now seems to screw up adding to the Show2Contributor table - it
> > adds one of them twice (194593), and skips one (194592).
> >
> > 3129  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 8097602 INSERT INTO Show2Contributor (showId,
> > contributorId) VALUES (?, ?) [params=(int) 13163, (int) 194575]
> > 3131  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 9028526 INSERT INTO Show2Contributor (showId,
> > contributorId) VALUES (?, ?) [params=(int) 13163, (int) 194593]
> > 3132  pu  TRACE  [main] openjpa.jdbc.SQL - <t 8736201, conn 6321587>
> > executing prepstmnt 11857123 INSERT INTO Show2Contributor (showId,
> > contributorId) VALUES (?, ?) [params=(int) 13163, (int) 194593]
> >
> > This leads to a contraint violation, and the whole thing rolls back.
> >
> > Um.
> >
> > Help?  :)  This happens for both a 1.1.0-SNAPSHOT as well as 1.0.1
> > release.
> >
> > TIA
> >
> > geir
> >
> >
> >
>
>



-- 
Patrick Linskey
202 669 5907

Reply via email to