У меня есть связь «многие ко многим», определенная как:
Parent.hbm.xml:
<set name="children" table="child_parent_map" lazy="true">
<cache usage="nonstrict-read-write" />
<key column="parent_id" />
<many-to-many class="Child">
<column name="child_id" not-null="true" index="child_parent_by_child"/>
</many-to-many>
</set>
Child.hbm.xml:
<set name="parents" table="child_parent_map" lazy="true">
<cache usage="nonstrict-read-write" />
<key column="child_id" />
<many-to-many column="parent_id" class="Parent" lazy="false"/>
</set>
Я вполне уверен, что инициализирую Parent.children
, прогуливаясь по коллекции.Примерно так:
for(Child child : parent.getChildren()) {
Hibernate.initialize(child.getAnotherProperty());
}
Родитель имеет шестерых детей.Тем не менее, в одном сеансе родитель, кажется, имеет только пять, а в другом (через 2 секунды ничего не изменилось в БД или в другом сеансе) - все шесть.На самом деле, я обнаружил это после отделения этих сущностей от сеанса с пользовательским клонером.
Я думал, что ленивые коллекции либо полностью инициализированы (т.е. все элементы), либо нет.Возможно ли, что каким-то образом только часть коллекции была инициализирована?Может ли быть проблема с кэшированием?
EDIT : этот сеанс обрабатывает довольно большой набор данных (несколько тысяч объектов).Возможно ли это потому, что некоторые уже загруженные объекты были исключены из сеанса?