Отображение гибернации «один ко многим»: связанная коллекция пуста - PullRequest
0 голосов
/ 22 марта 2012

User относится к Employee как один ко многим.
Проблема в том, что список Employee s в PeristentSet пуст.
Это видно из отладки.
И это как минимум один Employee существует в БД для User.

SQL:

create table users(
      id int not null primary key,
...
 constraint `emp_constr` foreign key(`empid`) references `employee`(`id`));

Пользовательский компонент:

@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 Ответ

1 голос
/ 22 марта 2012

Это классический случай Ленивая загрузка в спящем режиме.

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

Вам необходимо добавить lazy="false" в отображение списка.Прочитайте здесь для ссылки на спящий режим.

...