我在 JBoss 5.0.1GA 上设置了一个 JSF 应用程序,以在表格中显示用户列表,并允许通过每个用户旁边的按钮删除单个用户。
当 deleteUser 被调用时,调用被传递给一个 UserDAOBean,它得到一个从 JBoss 注入的 EntityManager。
我正在使用代码
public void delete(E entity)
{
em.remove(em.merge(entity));
}
删除用户(代码是来自 JPA 教程的 c&p)。只是调用 em.remove(entity) 没有任何效果,仍然会导致同样的异常。
当到达这一行时,我得到一个 TransactionRequiredException:
(跳过显然不相关的堆栈跟踪的东西)
...
20:38:06,406 错误 [[Faces Servlet]] Servlet.service() for servlet Faces Servlet 抛出异常 javax.persistence.TransactionRequiredException:EntityManager 必须在 org.jboss.jpa.deployment.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory .java:155) 在 org.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:192) 在 at.fhj.itm.utils.DAOImplTemplate.delete(DAOImplTemplate.java:54) 在 at.fhj.itm。 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 处的 UserBean.delete(UserBean.java:53)
...
我已经尝试在它周围包装一个手动管理的事务(em.getTransaction().begin() + .commit()),但这失败了,因为它在 JBoss 容器中是不允许的。我在 UserTransaction 上也没有成功。在网上搜索这个问题也没有找到类似的案例和解决方案。
有没有人经历过类似的事情并找到解决方案?