[hibernate] получить объект вместе с объектами-полями

koly

Помогите плз с ошибкой:
объект SyncTransaction содержит в себе список объектов SyncObject.
Задаю такой маппинг для SyncTransaction:

<hibernate-mapping package="com.sentinel.model">

<class name="SyncTransaction" table="`SYNC_TRANSACTION`">

<id name="id" type="long" unsaved-value="null">
<column name="SYNC_TRANSACTION_ID" not-null="true"/>
<generator class="native"/>
</id>


<bag name="syncObjects" lazy="false" inverse="true" cascade="all-delete-orphan">
<key column="SYNC_TRANSACTION_ID"/>
<one-to-many class="SyncObject"/>
</bag>

</class>

</hibernate-mapping>

для SyncObject такой маппинг :

<hibernate-mapping package="com.sentinel.model">

<class name="SyncObject" table="`SYNC_OBJECT`">

<id name="id" type="long" unsaved-value="null">
<column name="SYNC_OBJECT_ID" not-null="true"/>
<generator class="native"/>
</id>

<many-to-one name="syncTransaction" lazy="false" class="SyncTransaction" column="SYNC_TRANSACTION_ID" cascade="none" />

</class>

</hibernate-mapping>

Пытаюсь читать syncTransaction:
     
DetachedCriteria criteria = DetachedCriteria.forEntityName("com.sentinel.model.SyncTransaction");
Object syncTransaction = template.findByCriteria(criteria);

В полученном syncTransaction список syncObjects пуст, хотя в БД каждому syncTransaction приписаны два SyncObject. В чем может быть проблема?

pitrik2

а вообще тебе надо включить опцию Eager
но ты должен четко понимать что тебе именно это и надо
в большинстве ситуаций это как раз не нужно, а все пытаются это юзать по незнанию
а тк, по обычному сценарию:
убираешь lazy из определения
получаешь syncTransaction
рефрешишь его
после этого все чайлды подключаются

koly

добавил fetch="join" в <bag> - и всё заработало.
Полтергейст какой-то...
а вообще тебе надо включить опцию Eager
но ты должен четко понимать что тебе именно это и надо
в большинстве ситуаций это как раз не нужно, а все пытаются это юзать по незнанию
а тк, по обычному сценарию:
убираешь lazy из определения
получаешь syncTransaction
рефрешишь его
после этого все чайлды подключаются

psm-home

А в чем полтергейст? По умолчанию оно коллекции достает лениво: web page . Ты его заставляешь джойном тащить и папу и деток. Что тебя удивляет?

koly

посмотри код. Я отключал лень

psm-home

Точно, извини. Попробовал тока что на моих hibernate+spring, все работает как положено. Убираю lazy="false", получаю исключение при попытке обратиться к элементам бэга. Ставлю на место, бэг загружется. Версия H. 3.1.3.

koly

у меня тоже hibernate+spring
Оставить комментарий
Имя или ник:
Комментарий: