一对多hibernate映射:相关集合为空

时间:2012-03-22 14:09:24

标签: hibernate collections mapping one-to-many

UserEmployee一对多有关 问题是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

1 个答案:

答案 0 :(得分:1)

这是hibernate中 Lazy loading 的经典案例。

<list name="employees" .... lazy="false" >

您需要将lazy="false"添加到列表映射中。请阅读here以获取休眠参考。