代码之家  ›  专栏  ›  技术社区  ›  ThunderPhoenix

“detach”和“remove”entityManager方法之间的差异

  •  12
  • ThunderPhoenix  · 技术社区  · 11 年前

    我想知道两者的真正区别是什么 em.detach(entity) , em.remove(entity) 并使用 JPQL 请求类似:

    em.createQuery("DELETE FROM Country").exceuteUpdate();
    

    谢谢

    1 回复  |  直到 11 年前
        1
  •  22
  •   JGutierrezC    7 年前
    void detach(java.lang.Object entity)
    

    从持久性上下文中删除给定的实体 ,导致托管实体分离。对实体所做的未清除的更改(如果有)(包括删除实体)将不会同步到数据库。以前引用已分离实体的实体将继续引用该实体。


    void remove(java.lang.Object entity)
    

    删除实体实例。 数据库立即受到影响。


    em.createQuery("DELETE FROM Country").exceuteUpdate();
    

    删除是否直接到数据库,例如,如果您将该对象保存在任何列表中,或者它是一个简单的引用对象,它不会得到更改,并且如果您试图合并或对此进行操作,肯定会引发错误。相信我,不要这样删除,除非这是你的最后选择。

    希望这是一个明确的答案!

    顺致敬意,