openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Patrick Linskey" <>
Subject RE:
Date Wed, 13 Dec 2006 02:42:28 GMT
> On Dec 12, 2006, at 6:24 PM, Dain Sundstrom wrote:
> > Does JPA guarantee that only one bean will be activated for a  
> > specific pk per transaction?
> Yes.
> > Specifically, will OpenJPA ever create more that one bean for a  
> > specific Class:PK in a single transaction?
> No.

The full story is a little bit more complicated with OpenJPA. JPA guarantees
that object equality (==) comparison must pass for two references that point
to the same database record in the same transaction. IOW, however you
navigate to / query for a given record, you'll get back a reference to the
same Java object in a given transaction.

The complication is that in most circumstances, OpenJPA holds weak
references to all objects except ones with unflushed modifications. The
guarantee I outlined above still holds, since if you hold a reference to an
instance, our weak reference will be maintained as well, and equality tests
will pass. But if you release your reference, the instance may become
garbage-collected, so if you later query for / navigate to the instance, you
might end up with a different object reference.

I bring all this up because it means that OpenJPA does not guarantee that
the return value of System.identityHashCode() will be the same for a given
record over the course of a transaction. So, be sure that you bear this
restriction in mind if you use an IdentityHashMap or some equivalent

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.

View raw message