Почему запрос Hibernate по идентификатору сущности, а не по отношению ко многим? - PullRequest
0 голосов
/ 26 апреля 2019

Я сталкиваюсь со странным поведением в спящем режиме при получении списка предварительных условий, отфильтрованных по отношению ко многим.

Когда я выполняю следующий запрос

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. Окончательный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...