Kos*_*801 7 java jsf jboss jpa entitymanager
我在JBoss 5.0.1GA上设置了一个JSF应用程序,在表格中显示用户列表,并允许通过每个用户旁边的按钮删除单个用户.
当调用deleteUser时,调用将传递给UserDAOBean,后者从JBoss注入一个EntityManager.
我正在使用代码
public void delete(E entity)
{
em.remove(em.merge(entity));
}
Run Code Online (Sandbox Code Playgroud)
删除用户(代码是JPA教程中的c&p).只是调用em.remove(实体)没有任何效果,仍会导致相同的异常.
到达这一行时,我得到一个TransactionRequiredException:
(跳过显然不相关的堆栈跟踪)
...
20:38:06,406错误[[Faces Servlet]] servlet的Servlet.service()Faces Servlet抛出异常javax.persistence.TransactionRequiredException:EntityManager必须在org.jboss.jpa.deployment.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory)的事务中访问.java:155)atg.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:192)位于at.fhj.itm的at.fhj.itm.utils.DAOImplTemplate.delete(DAOImplTemplate.java:54). Sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)中的UserBean.delete(UserBean.java:53)
...
我已经尝试在它周围包装一个手动管理的事务(em.getTransaction().begin()+ .commit()),但这失败了,因为它不允许在JBoss容器中.UserTransaction我也没有成功.在网上搜索此问题也没有出现类似案例和解决方案.
有没有人经历过类似的事情,并找到了解决方案?
找到了缺失的链接.
它确实是一个缺少的事务,但解决方案不是使用EntityManager来处理它,而是添加一个注入的UserTransaction.
@Resource
UserTransaction ut;
...
public void delete(E entity)
{
ut.begin();
em.remove(em.merge(entity));
ut.commit();
}
Run Code Online (Sandbox Code Playgroud)
感谢所有建议,不知何故超过100个角落导致这个解决方案.
归档时间: |
|
查看次数: |
30340 次 |
最近记录: |