Java EJB容器如何处理类型为JTA的JPA
我在jpa JTA事务类型中使用了jboss和hibernate 4。在DAOUtil类中,我尝试获取实体管理器,我可以获取它并执行查询。但是当我刷新实体管理器时,错误发生了Java EJB容器如何处理类型为JTA的JPA,java,jakarta-ee,jpa,jboss,Java,Jakarta Ee,Jpa,Jboss,我在jpa JTA事务类型中使用了jboss和hibernate 4。在DAOUtil类中,我尝试获取实体管理器,我可以获取它并执行查询。但是当我刷新实体管理器时,错误发生了 Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityMa
Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:970)
at com.vms.dao.hibernate.HibernateDAOSession.flush(HibernateDAOSession.java:288)
我在互联网上搜索过,他们说:如果我们使用带有jta事务类型的jpa,我们必须将EntityManager注入ejb,对吗?
如果这是正确的,我有一个问题:实体管理器的线程池如何?我把那件事弄糊涂了
请任何人给我一个真实的方法,在JTA事务类型中使用jpa
补充说
我认为这是一个问题,因为我有一个获取EJB外部EntityManager的工具
还有一个问题,在使用JTA事务类型的JPA中,我认为我们不能使用本机sql进行更新。在ejb中,我有以下代码
public int executeNativeUpdate(String query, Map<String, Object> params) {
Query q = em.createNativeQuery(query);
setParameters(q, params);
return q.executeUpdate();
}
任何人都可以解释。我是JPA和JTA的初学者。如果我将JPA与JTA事务类型一起使用,并将EntityManager注入无状态EJB,EJB容器将为我处理事务,对吗?我不需要开始/提交事务。本地sql呢?EJB容器可以处理所有事务吗?如果使用JTA事务类型,则容器管理事务应用程序服务器、openjpa或其他。在这种情况下,您应该使用EJB,其中每个方法调用都封装在事务中。创建、提交、回滚、管理实体管理器-容器的工作。显示HibernateDAOSession和DAOUtil代码
Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query