Section 3.1.1 says:
"Runtime exceptions thrown by the methods of the EntityManager interface
other than the LockTimeoutException will cause the current transaction to
be marked for rollback if the persistence context is joined to that
transaction."
Is this intended to cover the EntityManager#contains(Object) method? That
method declares that it throws an IllegalStateException if the supplied
Object is not an entity. That suggests to me that at runtime if I have an
object in hand whose origin I'm not sure of then I can't simply blindly
pass it to this contains() method, as that might result in transaction
rollback. That seems kind of harsh to me.
It would appear that the only safe way to check to see if an arbitrary
object is both an entity and in the persistence context would be to first
check to see if the object is in the metamodel's list of entities and then
call EntityManager#contains(Object) passing it. This seems really
cumbersome for a very common check.
So: should em.contains(arbitraryObjectFromSomewhere) cause the transaction
to rollback if arbitraryObjectFromSomewhere is not in fact an entity? Is
there another idiom for testing for entity-ness/hood that I'm missing?
Best,
Laird
--
http://about.me/lairdnelson