HQL получить родителя от ребенка, не зная родителя - PullRequest
0 голосов
/ 12 января 2012

У меня следующая проблема: я хочу получить родительский элемент от ребенка с помощью HQL.

Parent.hbm.xml

<hibernate-mapping>
<class name="Parent" table="Parent">
    <id name="uuid" type="java.lang.String" unsaved-value="null" access="field">
        <column name="uuid" not-null="true" />
        <generator class="org.hibernate.id.UUIDGenerator" />
    </id>

    <list name="events" table="ParentToChild" cascade="all-delete-orphan" lazy="false">
        <key column="parentUuid" />
        <index column="idx" />
        <one-to-many class="Child" />
    </list>

</class>

<query name="findParentByChild">
    <![CDATA[
         select p from Parent as p, Child as c where c.uuid = :uuid and p.uuid = c.parentUuid 
         ]]>
</query>
</hibernate-mapping>

Child.hbm.xml

<hibernate-mapping>
<class name="Child" table="Child">

    <id name="uuid" type="java.lang.String" access="field">
        <column name="uuid" not-null="true" />
        <generator class="org.hibernate.id.UUIDGenerator" />
    </id>

    <other properties..>
    </class>
 </hibernate-mapping

Я вижу, что таблица, сгенерированная для дочернего элемента, содержит столбец parentUuid, поэтому мой вопрос: как мне это сделать в HQL?Можно ли использовать внешний ключ в HQL?

1 Ответ

2 голосов
/ 12 января 2012

Вы можете использовать join:

select p Parent from Parent p join p.events c where c.uuid = :uuid
...