我有的:

我需要更新我的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);
  }
}

最佳答案

我认为CascadeType.ALL是问题

您可以改用

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


您还可以将所需的任何其他层叠选项添加到此集合中。

10-07 15:51