我是JPA / Hibernate的新手,我想知道,通常什么是更新复杂实体的最佳方法?

例如,考虑以下实体:

@Entity
public class Employee {

    @Id
    private long id;
    @Column
    private String name;
    @ManyToMany
    private List<Positions> positions;

    // Getters and setters...

}


更新职位参考的最佳方法是什么?目前,一项服务正在向我传递该员工应具有的职位列表。创建它们很容易:

for (long positionId : positionIdList) {
    Position position = entityManager.find(positionId);
    employee.getPositions.add(position);
}

entityManager.persist(employee);


但是,在更新员工时,我不确定更新员工职位的最佳方法是什么。我认为有两种选择:


我解析职位ID的列表,并确定是否需要添加/删除职位(这似乎不是一个有趣的过程,并且可能会导致许多删除查询)
我删除所有职位,然后重新添加指定的职位。 JPA / Hibernate中是否可以使用一个sql命令删除所有子项(在本例中为位置)?


我在想这个错误的方式吗?你们推荐什么?

最佳答案

怎么样

employee.getPositions.clear(); // delete all existing one
  // add all of them again
 for (long positionId : positionIdList) {
    Position position = entityManager.find(positionId);
    employee.getPositions.add(position);
}


尽管这可能不是最有效的方法。有关详细讨论,请参见here
级联在这里无济于事,因为在ManyToMany关系中,职位可能不会孤立,因为他们可能会附加到其他员工,或者甚至根本不应删除职位,因为它们可以独立存在。

09-30 17:21
查看更多