When I use entity manager find() method with LockModeType inside JTA transaction boundaries, throw fowling exception: _Exception in thread "main" javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:413) at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3395) at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3310) at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3292) at ro.alsoco.tt.test.TestJPA.run(TestJPA.java:71) at ro.alsoco.tt.test.TestJPA.main(TestJPA.java:24) _ This doesn't happen when I use for example createQuery or if i call clear() or flush() before find(). After a few research I saw the majority of entity manipulation methods of EntityManager (SessionImpl or AbstractSharedSessionContract classes) execute on begining pulseTransactionCoordinator(). But find() mehod not. I don't know if there are any special reason why find method not call pulseTransactionCoordinator(), witch I saw register synchronization with JTA. For the moment I solved my problem issuing a joinTransaction() as first command after begin transaction. Also, the problem doesn't happen if i create entity manager inside the JTA transaction. But I have strong resons to create entity manager outside the transaction. It is possible to call pulseTransactionCoordinator() in find() method as bellow? Maybe in next version? _@Override public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockModeType, Map<String, Object> properties) { checkOpen(); pulseTransactionCoordinator(); ............. _ Thank you, Alex |