0

HQL (findRoomQuery) という名前のこれがあるとします。

select r from House h inner join h.roomList r
where h.address = :address and r.roomNo = :roomNo

House エンティティのマッピングは次のようになります。

<class name="com.example.House" table="house">      
    <id name="id" column="id" type="long">
        <generator class="assigned" />
    </id>

    <property name="address" column="address" type="string" length="100" not-null="false"/>
    <set name="roomList" cascade="none" lazy="false" fetch="join" inverse="true"> 
        <key>
            <column name="house_id"/>
        </key>
        <one-to-many class="com.example.Room"/>
    </set>
</class>

Room エンティティは次のようになります。

<class name="com.example.Room" table="room">        
    <id name="id" column="id" type="long">
        <generator class="assigned" />
    </id>

    <property name="houseId" column="house_id" type="long" not-null="true"/>
    <property name="roomNo" column="room_no" type="string" length="4" not-null="false"/>
</class>

この関係は、Houseが 1 つまたは複数のRoomを持つことができるというものです。

クエリを実行するコードは次のようになります。

Query query = getSession().createQuery("findRoomQuery")
                .setParameter("address", address)
                .setParameter("roomNo", roomNo);
return query.list();

select rからHQL がRoomエンティティを返していることがわかります(r は h.roomList のエイリアスです)。

Hibernate Criteria Queryで同じことを行うには? 出来ますか?

4

1 に答える 1