Я сталкиваюсь со странным поведением в спящем режиме при получении списка предварительных условий, отфильтрованных по отношению ко многим.
Когда я выполняю следующий запрос
session.createCriteria(ScanPrecondition.class)
.createAlias("inputs", "inputs")
.add(Restrictions.eq("inputs.id", inputId))
.list();
, я получаюследующие журналы sql:
Hibernate: select scanprecon0_.ID as ID1_47_0_, scanprecon0_.DESCRIPTION as DESCRIPT2_47_0_ from SCAN_PRECONDITION scanprecon0_ where scanprecon0_.ID=?
Hibernate: select scanprecon0_.ID as ID1_47_0_, scanprecon0_.DESCRIPTION as DESCRIPT2_47_0_ from SCAN_PRECONDITION scanprecon0_ where scanprecon0_.ID=?
Hibernate: select scanprecon0_.ID as ID1_47_0_, scanprecon0_.DESCRIPTION as DESCRIPT2_47_0_ from SCAN_PRECONDITION scanprecon0_ where scanprecon0_.ID=?
Почему запрос Hibernate по идентификатору сущности, а не по отношению «многие ко многим»?
Здесь сущностии hbm:
ScanPrecondition.java
package org.company.model;
public class ScanPrecondition {
private String id;
private String description;
private Set<ScanInput> inputs = new HashSet<>(0);
// getters and setters
// equals and hash code by id
}
ScanInput.java
package org.company.model;
public class ScanInput {
private String id;
private String description;
// getters and setters
// equals and hash code by id
}
ScanPrecondition.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.company.model.ScanPrecondition" table="SCAN_PRECONDITION">
<id name="id" column="ID" type="string" length="17" />
<property name="description" column="DESCRIPTION" type="string" length="255" not-null="true" />
<set name="inputs" table="SCAN_INPUT_PRECONDITION" lazy="true">
<key column="SCAN_PRECONDITION_ID" />
<many-to-many class="org.company.model.ScanInput" column="SCAN_INPUT_ID" />
</set>
</class>
</hibernate-mapping>
Спящий вариант: 4.2.6. Окончательный