Hibernate OneToMany和ManyToOne混乱!空列表!

时间:2011-01-26 15:49:38

标签: java database hibernate persistence entity-relationship

我有两张桌子...... 例如 - 公司和员工(让我们保持这简单)

Company( id, name );
Employee( id,  company_id );

Employee.company_id是外键。

我的实体模型看起来像这样......

员工

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "company_id")
Company company;

公司

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "company_id")
List<Employee> employeeList = new ArrayList<Employee>();

所以,是的,我想要一份公司员工名单。

当我做以下事情时......

Employee e = new Employee();
e.setCompany(c); //c is an Company that is already in the database.
DAO.insertEmployee(e); //this works fine!

如果我然后获取我的公司对象,那么它的列表是空的!

我尝试过与Hibernate文档无穷无尽的不同方法!

显然没有尝试过正确的!

我只是希望为我填充列表或找出一个合理的替代方案。

非常感谢帮助,谢谢!

2 个答案:

答案 0 :(得分:5)

您需要使双向关系成为可能。你的是两个单向的。将mappedBy = "company"添加到employeeList。这告诉hibernate员工列表只是从EmployeeCompany

的ref的反面
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "company")
List<Employee> employeeList = new ArrayList<Employee>();

答案 1 :(得分:0)

我认为你不应该这样做 List<Employee> employeeList = new ArrayList<Employee>(); 当您定义了将列表作为拥有方的一方(在您的情况下是员工而非公司)时,应该执行此操作。我想每次加载Company实例时,都会为您提供一个新的employeeList实例,但不确定。但可以肯定的是,每次都不需要实例化新的ArrayList。