【问题标题】:Delete entity while using two instances of EntityManger使用 EntityManager 的两个实例时删除实体
【发布时间】:2023-03-12 02:40:01
【问题描述】:

我正在尝试删除实体,但出现此异常:

java.lang.IllegalArgumentException: Removing a detached instance

我知道我的问题是我使用了两个不同的 EntityManger 实例。我寻找解决方案,但我找到的所有解决方案都是这样的:

entityManger.remove(entityManger.merge(entity));

除了使用合并和删除功能,还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: java spring hibernate sql-delete hibernate-entitymanager


    【解决方案1】:

    异常表示您的实体不受持久上下文管理。您不能删除非托管实体。你可以使用

    Entity entity = entityManager.getReference(Entity.class, id);
    entityManager.remove(entity);
    

    更好,因为你得到了惰性实例。 对不起我的英语)

    【讨论】:

    • 这不会给我抛出异常,但它不会删除我的实体,可能是因为我正在使用一个 EntityManager 执行 getReference 并使用其他 EntityManager 删除。
    • 我不知道这怎么可能)但是使用 EntityManager 来控制您要删除的实体。为什么你有两个EntityManager?你们两个数据库?
    • 在一个类中,我找到了要删除的实体(第一个实体管理器)。该类调用其他类,我实际上删除了对象(第二个实体管理器)。
    • 好的。至于我,程序的逻辑是不正确的。您不需要创建多个实体管理器。在单独的类中创建一个并在任何地方使用它。并且一定要使用事务交易。
    • 是的,我改变了一点架构并使用了您的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2021-12-20
    • 2016-11-05
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多