Сущности
Код: Выделить всё
class User
{
long id;
boolean active;
Address address;
}
class Address
{
long id;
String streetNum;
String street;
String country;
}
Код: Выделить всё
Criteria criteria = session.createCriteria(User.class, "u");
criteria.createAlias("u.address", "a");
criteria.add(Restrictions.eq("a.streetNum", "15"));
final List users = criteria.list();
Код: Выделить всё
SELECT
u.id,
u.active,
a.id,
a.streetNum,
a.street,
a.country
FROM
user AS u
JOIN address AS a ON u.addressID = a.id
WHERE
a.streetNum = 15
Код: Выделить всё
SELECT
u.id,
u.active
FROM
user AS u
JOIN address AS a ON u.addressID = a.id
WHERE
a.streetNum = 15
Это приведет к тому, что SQL будет включать все столбцы всех объединенных таблиц псевдонимов, что окажет серьезное влияние на производительность таблиц с большим количеством столбцов и фильтрацией по множеству ассоциаций и разбиений на страницы.
Запрос не заинтересован в получении столбцов ассоциаций.
NHibernate
В NHibernate для C#, похоже, у них есть Projections.rootEntity() (я предполагаю, что в этом случае), но нет в Java Hibernate 5.5.7.
Мобильная версия