Я новичок в Hibernate, и я пытаюсь динамически присоединяться к другой таблице. Я построил пример с тремя таблицами: Employee, Address, Country. Я хочу получить всех сотрудников определенной страны. Вот мой конфигурационный файл:Спящий режим: динамическое объединение нескольких таблиц
<class entity-name="Employee">
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
<property name="salary" column="salary" type="int"/>
<many-to-one name="address" column="address" unique="true"
class="Address" not-null="true"/>
</class>
<class entity-name="Address">
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="street" column="street_name" type="string"/>
<property name="city" column="city_name" type="string"/>
<property name="state" column="state_name" type="string"/>
<property name="zipcode" column="zipcode" type="string"/>
<many-to-one name="country" column="country" unique="true"
class="Country" not-null="true"/>
</class>
<class entity-name="Country">
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" type="string"/>
<property name="code" column="code" type="string"/>
</class>
Если я
List employees = session.createCriteria("Employee")
.createCriteria("address")
.createCriteria("country")
.add(Restrictions.eq("code","IT"))
.list();
я получить правильный результат обратно, но моя цель состоит в том, чтобы не вручную указать полный путь между начальной таблицей и таблицами фильтров: Я хочу, чтобы спящий режим делает работу для меня. Я хотел бы написать что-то вроде этого:
List employees = session.createCriteria("Employee")
.createCriteria("country")
.add(Restrictions.eq("code","IT"))
.list();
, но я получаю сообщение об ошибке
org.hibernate.QueryException: could not resolve property: country of: Employee
Хорошо, я понимаю ваше сравнение. Дело в том, что Hibernate имеет механизм запроса (builder), но он не способен динамически находить путь между двумя объектами на графике, как я предполагал. – Zardo
Вы правы. Спящий режим требует соединения в запросе, чтобы указать путь от сотрудника к стране _ через_ объект адреса – OndrejM