Hibernate:懒惰的集合和session.merge

时间:2013-11-25 12:57:56

标签: java hibernate

我拥有的内容:

我需要更新entity。我使用Hibernatee会话,这意味着我们在会话缓存中已经有entity

public void handle(Request request, Session session) {
  MyEntity updatedEntity = request.getEntity();
  session.merge(updatedEntity); //rewrite all lazy collections
}

所以我将对象发送给客户端,客户端将对象充满并将其发回以进行更新。

问题:

懒惰的集合不会发送到客户端。因此,如果延迟收集尚未为空,则会在session.merge(updatedEntity)字符串

中覆盖

这是因为客户端对这些集合中的元素一无所知

问题:

两个如何以正确的方式合并entity?意味着不重写惰性集合。

编辑:(我如何使用我的收藏品)

public class MyEntity {
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
  @JoinColumn(name = "entity_id")
  private List<AnotherEntity> anotherEntities;


  public void setAnotherEntities(List<AnotherEntity> anotherEntities) {
    // we must work with the same instance of list (again, because of orphanRemoval)
    this.anotherEntities.clear();
    this.anotherEntities.addAll(anotherEntities);
  }
}

1 个答案:

答案 0 :(得分:4)

我认为CascadeType.ALL是问题

您可以使用

 cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DELETE})

您还可以向此集添加您需要的任何其他级联选项。