【问题标题】:difference between 'detach' and 'remove' entityManager's methods“分离”和“删除”entityManager 的方法之间的区别
【发布时间】:2013-09-02 02:15:28
【问题描述】:

我想知道em.detach(entity)em.remove(entity) 和使用JPQL 请求之间的真正区别是什么:

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

谢谢。

【问题讨论】:

  • 基本上,当您想对该对象进行更多健全性检查时,您将使用分离,或者您将在提交之前继续使用该实例一段时间。这样 - 保持分离 - 您不会超载处理您的持久性的 JPA 的底层实现(例如 Hibernate)。有用的信息可以在这里找到:stackoverflow.com/questions/21622841/…
  • 或者当您想确定再次请求时,返回的对象将是新更新的对象。否则,EntityManager 可能会返回缓存的。

标签: jpa jpql entitymanager


【解决方案1】:
void detach(java.lang.Object entity)

从持久化上下文中移除给定实体,导致托管实体分离。对实体所做的未刷新更改(包括删除实体)将不会同步到数据库。之前引用了分离实体的实体将继续引用它。


void remove(java.lang.Object entity)

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


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

是否直接删除到数据库,如果你有那个对象,例如,保存在任何列表中或者它是一个简单的引用对象,它不会得到更改,如果你尝试合并肯定会引发错误,或者做有什么。相信我,不要这样删除,除非这是你最后的选择。

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

最好的问候!

【讨论】:

  • 第二种情况下被移除的对象会发生什么?会不会脱节?之后将对象作为常规对象进行操作是否可以保存?
猜你喜欢
  • 1970-01-01
  • 2013-05-16
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多