У меня есть две простые модели:
class Parent {
Long id; //auto generated sequence and primary key
String name;
Set<Child> children;
}
class Child {
String name;
Long parent_id; //foreign key
}
У меня hql-запрос, подобный следующему:
FROM Parent p
left join fetch p.children as children
WHERE p.name = 'John'
'children' - это набор (набор) модели 'Child' вРодительская модель.
Если у «Джона» есть 2 дочерних элемента, в результате вышеприведенного запроса я получу список из 2 родительских элементов (с одинаковой ссылкой), каждый из которых имеет 2 дочерних элементов, выполнив один запрос.
Я пытаюсьчтобы достичь того же с помощью API Criteria, как показано ниже:
Criteria c = session.createCriteria(Parent.class);
c.setFetchMode("children", FetchMode.JOIN);
c.createCriteria("children", Criteria.LEFT_JOIN);
c.add(Restrictions.eq("name", "John"));
c.scroll();
С помощью приведенного выше кода я получаю список из 2 родительских экземпляров (одна и та же ссылка) только с одним дочерним элементом (вместо ожидаемого 2), выполняющим одинSQL запрос
Что я делаю не так в API?Когда я вижу сгенерированный sql, это то же самое.