Столкнулся с багом Hibernate, который, похоже, живет уже давно и исправлять его не очень-то спешат: https://hibernate.onjira.com/browse/HHH-2666. Заключается он в том, что если для извлечения связанных объектов используется стратегия "subselect":
<set inverse="true" name="..." fetch="subselect">
<key>
<column name="..." not-null="true"/>
</key>
<one-to-many class="..."/>
</set>
,то при извлечении родительских объектов с использованием limit / order by второй запрос, используемый для извлечения связанных объектов, в подзапросе уже не содержит limit / order by, что приводит к извлечению потенциально гораздо большего числа строк, большая часть которых может оказаться ненужной (здесь первый select выполняется hiberante`ом сразу же, второй - лениво, при обращении к коллекции связанных объектов):
Hibernate: select ... from ... where ... order by ... asc limit ?Очень неприятно, т.к. стратегия, вобщем-то, достаточно удобная.
Hibernate: select ... from ... where ... in (select ... from ... where ... )
Комментариев нет:
Отправить комментарий