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で同じことを行うには? 出来ますか?