调用JPA的remove()时:“JTA EntityManager无法使用getTransaction()”

时间:2011-02-24 16:46:46

标签: jpa persistence

我创建了一个Role实体,我想对它进行CRUD操作。一切都运作良好,除了“D”(删除)操作。

我使用与此ObjectDB example code类似的内容。

正如上面引用的网页中所述,

  

抛出IllegalArgumentException   如果参数不是a,则删除   实体类的实例或如果它   是一个独立的实体。

我该怎么做?我做错了什么?

我的Role实体与User实体相关(角色可以“拥有”多个用户,用户只有一个角色)。但是,我要删除的Role实例绝不会链接到任何活动的用户实例。

2 个答案:

答案 0 :(得分:3)

感谢您的回答,但这对我没有多大帮助。虽然我认为它与JTA有关。 我发现了一个解决方案,所以我想在这里分享一下:

而不是:

public void removeRole(Role aRole) {
    entityManager.remove(aRole);    
} 

我所要做的就是:

public void removeRole(Role aRole) {
entityManager.remove(entityManager.merge(aRole));   
}

这就是诀窍。去搞清楚。

答案 1 :(得分:1)

你得到什么错误?

如果您使用的是JTA,则无法使用EntityManager事务,您必须使用JTA事务(EJB或来自conext的查找用户事务)。要么不将JPA配置为使用JTA,要么使用JTA而不是EM事务。