Hi, I have the following method on my JPA base DAO:
protected int executeUpdate(final Query... queries) { int total = 0; try { beginTransaction(); for(final Query query : queries) { total += query.executeUpdate(); if(isLoggable()) { LogService.logUpdate(em, query, getPersistentClass().getSimpleName()); } } commitTransaction(); } catch(final Exception e) { rollbackTransaction(e); } return total; } After I changed it from CDI produced EntityManager to JTA + bean managed transactions, Hibernate complains that the query parameters are not set. I noticed that it is because I'm creating the query before the transaction was started, and *JtaQuery.getEntityManager()* is like this: private EntityManager getEntityManager() { if (!underTx) { entityManager = jtaEntityManager.getEntityManager(); this.underTx = jtaEntityManager.isTransactionActive(); createQuery(); } return entityManager; } Since *underTx* is updated to *true* before *createQuery() *is called, the query parameters are not bound again: private Query createQuery() { if (!unwrap) { query = jtaEntityManager.createQuery(queryType(), entityManager, method, args); } if (!underTx) { for (final QueryOperation op : appliedOperations) { query = op.apply(query); } } return query; } TomEE version is 7.0.1. I'd like to know if you could change *getEntityManager()* to update *underTx* after *createQuery()* is called, or if I shouldn't create queries outside transactions at all when using JTA. Thanks