我有这个 2 域模型:
员工
public class Employee {
private Long id;
private String name;
private String family;
private Company company;
//getter & setter
}
和公司:
公开类公司{
private Long id;
private String name;
private Set<Employee> employees;
//getter & setter
}
并且 Employee 与 Company 是多对一关系,而从 Company 端来看是一对多关系。
我在事务中保存一个公司对象,并在保存该公司的员工后:
@Transactional
puplic Long Save (){
Company cmp=new Company();
cmp.setName("Oracle");
session.save(cmp);
Employee employee=new Employee();
employee.setName("james");
employee.setFamily("dep");
employee.setCompany(cmp);
cmp.getEmployees();//will raise NullPointerException
cmp=session.get(cmp.getId());//because of first level cache it doesnt load it
}
保存员工后,如果我想从公司获取员工集合,它会引发空指针异常,如果我想加载它,因为一级缓存,hibernate不会接触数据库,并且员工集仍然存在无效的 。
第一个解决方案是我可以在保存员工后刷新 Company 对象,但我认为 hibernate 必须有除此之外的解决方案。
最佳答案
您永远不应该使用 null
集合,因此您应该将映射更改为:
private Set<Employee> employees = new HashSet<>();
这样,您甚至不需要 setter,因为 getter 就足够了。另外,请确保同步双向关联的双方:
public void addEmployee(Employee employee) {
employees.add(employee);
employee.setCompany(this);
}
public void removeEmployee(Employee employee) {
employees.remove(employee);
employee.setCompany(null);
}
您还需要implement equals
and hashCode
properly in your child entity类。
关于java - Hibernate 多对一关系刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42781811/