User
与Employee
一对多有关
问题是PeristentSet中的Employee
列表是空的
从调试中可以看出
并且在Employee
的数据库中至少有一个User
。
SQL:
create table users(
id int not null primary key,
...
constraint `emp_constr` foreign key(`empid`) references `employee`(`id`));
用户bean:
@ManagedBean
@SessionScoped
public class User {
private long id;
private List<Employee> employees = new ArrayList<Employee>();
...
user.hbm.xml config:
<list name="employees" cascade="all" inverse="false" fetch="join">
<key>
<column name="userid" not-null="true"/>
</key>
<index column="idx"/>
<one-to-many class="entry.Employee"/>
</list>
DAO电话:
@Transactional
public List<User> getUsers() {
return sessionFactory.getCurrentSession().createCriteria(User.class)
.list();
}
.hbm.xml
文件中是否存在错误,或者我应明确将setFetchMode()
添加到DAO
?
编辑:
我只能获得一个大小的集合,实际上它包含更多具有这种配置的元素:
<list name="employees" table="employee" lazy="false">
<key column="userid" not-null="true"/>
<list-index column="idx"/>
<one-to-many class="entry.Employee"/>
</list>
那是因为idx=0
如果idx=7
集合大小为8
答案 0 :(得分:1)
这是hibernate中 Lazy loading 的经典案例。
<list name="employees" .... lazy="false" >
您需要将lazy="false"
添加到列表映射中。请阅读here以获取休眠参考。