openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Patrick Linskey" <plins...@gmail.com>
Subject Re: @PostPersist woes
Date Sun, 18 Nov 2007 00:49:18 GMT
I think that there was a bit more to it... I think that you were also
trying to do something that required getting the OID during a
@PostPersist, right?

-Patrick

On Nov 17, 2007 12:26 PM, Geir Magnusson Jr. <geir@pobox.com> wrote:
>
> On Nov 16, 2007, at 3:00 PM, Craig L Russell wrote:
>
> > Hi Geir,
> >
> > It still isn't clear to me what you are trying to accomplish. Would
> > it be possible for you to describe what the goal is? (I might have
> > missed the key idea in earlier posts...)
> >
>
> Persist an object graph in which object A that has a auto-gen PK and a
> reference to object B, such that object B has a PK and a reference to
> object A via a FK in table B.
>
> I found a workaround for now.  I need to see if Hibernate can do
> this.  I think it can.  I realize that depending on that isn't
> portable, but it sure was convenient.
>
> geir
>
>
>
> > Craig
> >
> > On Nov 15, 2007, at 1:59 PM, Geir Magnusson Jr. wrote:
> >
> >>
> >> On Nov 15, 2007, at 4:41 PM, Geir Magnusson Jr. wrote:
> >>
> >>>
> >>> On Nov 15, 2007, at 4:34 PM, Pinaki Poddar wrote:
> >>>
> >>>>> persist() has in it a new, unmanaged entity.
> >>>>
> >>>> a) If persist(a) is failing on b, what is the cascade type
> >>>> specified on
> >>>> relation a.b?
> >>>
> >>> I'm not actually sure that it's failing on b. I guess I can try to
> >>> figure that out.  I just know that when  I change things so that I
> >>> have an unmanaged b, it fails.
> >>
> >> So I put some printlns in my @PostPersist routine, and I see that
> >> for something w/o the reference to an unmanaged entity, I get a
> >> sequence like this :
> >>
> >> [junit-coverage] ###### 1 I'm a class com.joost.model.show.Show
> >> [junit-coverage] ###### 2 I'm a class com.joost.model.show.Show
> >> [junit-coverage] 7996  pu  TRACE  [main] openjpa.jdbc.SQL - <t
> >> 9777317, conn 7891417> executing prepstmnt 9148991 INSERT INTO
> >> APP.INVENTORYITEM (CHANGENUMBER, COID, CREATIONDATE, DELETED,
> >> FIRSTPUBLICATIONDATE, LASTMODIFICATIONDATE, LATESTPUBLICATIONDATE,
> >> NAME, OKTOPUBLISH, PUBLICID, PUBLISHED, UUID, ITEMTYPE, DAMID,
> >> OWNERID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
> >> [params=(null) null, (null) null, (Timestamp) 2007-11-15
> >> 16:51:04.42, (int) 0, (null) null, (Timestamp) 2007-11-15
> >> 16:51:04.42, (null) null, (String) a, (int) 0, (null) null, (int)
> >> 0, (String) 007ddeca-edff-4657-927f-ce77205c28ef, (String)
> >> VideoShow, (int) 10, (int) 10]
> >> [junit-coverage] 7997  pu  TRACE  [main] openjpa.jdbc.SQL - <t
> >> 9777317, conn 7891417> [1 ms] spent
> >> [junit-coverage] 7997  pu  TRACE  [main] openjpa.jdbc.SQL - <t
> >> 9777317, conn 7891417> executing prepstmnt 13415937
> >> VALUES(IDENTITY_VAL_LOCAL())
> >> [junit-coverage] 7997  pu  TRACE  [main] openjpa.jdbc.SQL - <t
> >> 9777317, conn 7891417> [0 ms] spent
> >> [junit-coverage] 8004  pu  TRACE  [main] openjpa.jdbc.SQL - <t
> >> 9777317, conn 7891417> executing prepstmnt 6406303 INSERT INTO
> >> APP.VIDEOSHOW (ID, ADSFREE, CODURATION, COFILENAME,
> >> MAINDESCRIPTION, MAINTITLE, MINAGE, PRODUCTIONYEARS, ISPROMOTIONAL,
> >> RIGHTS, VALIDFROM, VALIDTO, ADVERTISINGSHOWINFOID,
> >> GEORIGHTSKINDCODE, MAINCHANNELID, MAINDESCRIPTIONLANGUAGECODE,
> >> MAINTITLELANGUAGECODE, OVERLAYID, SELECTEDTHUMBNAILID) VALUES
> >> (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
> >> [params=(int) 74, (int) 0, (null) null, (null) null, (null) null,
> >> (null) null, (null) null, (null) null, (int) 0, (null) null, (null)
> >> null, (null) null, (null) null, (int) 3, (null) null, (null) null,
> >> (null) null, (null) null, (null) null]
> >> [junit-coverage] 8006  pu  TRACE  [main] openjpa.jdbc.SQL - <t
> >> 9777317, conn 7891417> [2 ms] spent
> >> [junit-coverage] ###### 3 I'm a class com.joost.model.show.Show
> >> [junit-coverage] ###### 4 I'm a class com.joost.model.show.Show
> >>
> >> The code after the ###### 2 message is a getId(), and that triggers
> >> the write to the db.  You can see that we write to both
> >> InventoryItem (the base class) and then VideoShow  (java class Show
> >> maps to the VideoShow table...    public class Show extends
> >> InventoryItem)
> >>
> >> However, for the case of "b" within "a", which is a ChannelItem
> >> within a Channel (both of which extend InventoryItem) I get :
> >>
> >> [junit-coverage] ###### 1 I'm a class com.joost.model.channel.Channel
> >> [junit-coverage] ###### 2 I'm a class com.joost.model.channel.Channel
> >> [junit-coverage] ###### 1 I'm a class com.joost.model.ChannelItem
> >> [junit-coverage] ###### 2 I'm a class com.joost.model.ChannelItem
> >> [junit-coverage] Nov 15, 2007 4:51:04 PM
> >> org.springframework.test.AbstractTransactionalSpringContextTests
> >> endTransaction
> >> [junit-coverage] INFO: Rolled back transaction after test execution
> >> [junit-coverage] ------------- ---------------- ---------------
> >>               <EXCEPTION>
> >>
> >> so the getId() for the Channel ("a") called after the #### 2
> >> message triggers the @PostPersist for the ChannelItem ("b") which
> >> has a reference to the id for Channel.  I think that therefore I
> >> can conclude that what I'm doing is illegal according to the spec
> >>
> >>  3.5.2 : It isimplementation-dependent as to whether callback
> >> methods are invoked before or after the cascading of the lifecycle
> >> events to related entities. Applications should not depend on this
> >> ordering.
> >>
> >> and therefore if that's true, I'm sorry for wasting your time :)
> >>
> >> Anyone have a clue how I can get out of this mess?
> >>
> >> geir
> >>
> >>
> >>
> >>
> >>
> >>>
> >>>
> >>>>
> >>>> b) what is the identity definition on b?
> >>>> c) if b is using auto-assigned GeneratedValue or its id is being
> >>>> set by
> >>>> application?
> >>>>
> >>>> -----Original Message-----
> >>>> From: Geir Magnusson Jr. [mailto:geir@pobox.com]
> >>>> Sent: Thursday, November 15, 2007 11:10 AM
> >>>> To: dev@openjpa.apache.org
> >>>> Subject: @PostPersist woes
> >>>>
> >>>> Woe is me :)
> >>>>
> >>>> I'm using @PostPersist to create some kind of machine-generated
> >>>> data for
> >>>> entities on insert, and I'm running into the following problem
> >>>> when an
> >>>> entity for which I called persist() has in it a new, unmanaged
> >>>> entity.
> >>>>
> >>>> [junit-coverage] Caused by: <openjpa-1.0.0-r420667:568756 fatal
> >>>> user
> >>>> error> org.apache.openjpa.util.InvalidStateException: Detected
> >>>> reentrant flush.  Make sure your flush-time instance callback
> >>>> methods or
> >>>> event listeners do not invoke any operations that require the in-
> >>>> progress flush to complete.
> >>>> [junit-coverage]   at
> >>>> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:
> >>>> 1840)
> >>>> [junit-coverage]   at
> >>>> org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1615)
> >>>> [junit-coverage]   at
> >>>> org
> >>>> .apache
> >>>> .openjpa
> >>>> .kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:
> >>>> 505)
> >>>> [junit-coverage]   at
> >>>> org
> >>>> .apache
> >>>> .openjpa
> >>>> .kernel.StateManagerImpl.assignField(StateManagerImpl.java:590)
> >>>> [junit-coverage]   at
> >>>> org
> >>>> .apache
> >>>> .openjpa
> >>>> .kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:
> >>>> 1451)
> >>>> [junit-coverage]   at
> >>>> org
> >>>> .apache
> >>>> .openjpa
> >>>> .kernel.StateManagerImpl.accessingField(StateManagerImpl.java:
> >>>> 1434)
> >>>> [junit-coverage]   at
> >>>> com.joost.model.InventoryItem.getId(InventoryItem.java)
> >>>> [junit-coverage]   at
> >>>> com
> >>>> .joost.model.InventoryItem.initPublicIdIfNull(InventoryItem.java:
> >>>> 331)
> >>>>
> >>>>
> >>>> in InventoryItem, getId is the PK, and my read of the spec says
> >>>> that I
> >>>> am guaranteed to have it in @PostPersist.
> >>>>
> >>>> Bug?  me doing something wrong?
> >>>>
> >>>> geir
> >>>>
> >>>>
> >>>> Notice:  This email message, together with any attachments, may
> >>>> contain information  of  BEA Systems,  Inc.,  its subsidiaries
> >>>> and  affiliated entities,  that may be confidential,
> >>>> proprietary,  copyrighted  and/or legally privileged, and is
> >>>> intended solely for the use of the individual or entity named in
> >>>> this message. If you are not the intended recipient, and have
> >>>> received this message in error, please immediately return this by
> >>>> email and then delete it.
> >>>
> >>
> >
> > Craig Russell
> > Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
> > 408 276-5638 mailto:Craig.Russell@sun.com
> > P.S. A good JDO? O, Gasp!
> >
>
>



-- 
Patrick Linskey
202 669 5907

Mime
View raw message