我是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关系中,职位可能不会孤立,因为他们可能会附加到其他员工,或者甚至根本不应删除职位,因为它们可以独立存在。