【问题标题】:When calling JPA's remove() : "A JTA EntityManager cannot use getTransaction()"调用 JPA 的 remove() 时:“A JTA EntityManager cannot use getTransaction()”
【发布时间】:2011-02-24 16:46:46
【问题描述】:

我创建了一个Role 实体,我想对其进行CRUD 操作。一切正常,除了“D”(删除)操作。

我使用类似于 ObjectDB example code 的东西。

如上面引用的网页所述,

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

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

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

【问题讨论】:

    标签: jpa persistence


    【解决方案1】:

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

    而不是:

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

    我所要做的就是:

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

    这就是诀窍。去搞清楚。

    【讨论】:

      【解决方案2】:

      你遇到了什么错误?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-13
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 2018-05-24
        • 2016-07-18
        相关资源
        最近更新 更多