各种jpa方法的真实场景

时间:2015-09-04 08:52:38

标签: java hibernate jpa

我正在寻找使用hibernate / jpa方法的一些真实场景

  1. 喜欢何时使用merge()以及何时使用persist()?
  2. 何时使用getReference()vs find()?
  3. 我们什么时候需要拆卸物体?分离实体的用途是什么?

1 个答案:

答案 0 :(得分:1)

以下是一些例子:

    只要您需要将 new 对象放入数据库,就应该使用
  1. persist()。虽然merge()会在不存在的情况下持久存在,但在我们使用merge()来保存新对象时,在某些极端情况下(至少对我来说)发生了奇怪的事情。 merge()有用的一种情况是,当您第一次从db获取对象时,将其传递给视图/控制器层(或以任何其他方式分离),更改它并且您希望保存更改。使用merge()这将自动完成,否则您必须通过id从db获取对象并从分离的字段中复制所有字段(如果您不确切知道更改的内容)。
  2. 当您知道某个实体对象的ID(通过访问其分离的副本或其他方式)时,您只需要与另一个实体对象相关联。使用getReference()您不会将整个对象加载到会话中,您只需将其引用设置为附加对象,这样您最终会(至少)使用find()进行一次查询。另一方面,find()加载整个对象,无需为此指定用例。
  3. 虽然此示例中应使用DTO,但假设您有一个Web服务返回实体的实例。并且您不想返回它的所有数据,您想要取消某些属性。如果对附加对象执行此操作,则这些空值将保存到数据库中。因此,在将其返回给Web服务调用者之前,请将其分离并安全地进行修改。