gpt4 book ai didi

java - 多对一关系中的 Hibernate 刷新

转载 作者:行者123 更新时间:2023-11-30 07:55:54 26 4
gpt4 key购买 nike

我有这个 2 域模型:

员工

public class Employee {

private Long id;
private String name;
private String family;
private Company company;

//getter & setter

}

和公司:

公共(public)类公司{

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com