比方說,我有這個命名HQL(findRoomQuery):如何使用Hibernate Criteria Query選擇子級實體?
select r from House h inner join h.roomList r
where h.address = :address and r.roomNo = :roomNo
家實體的映射是這樣的:
<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>
雖然房間實體是這樣的:
<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>
關係是房子可以有一個或多個房間。
執行查詢的代碼是這樣的:
Query query = getSession().createQuery("findRoomQuery")
.setParameter("address", address)
.setParameter("roomNo", roomNo);
return query.list();
你可以看到從HQL 設定R(r爲h.roomList的別名)返回間實體。
如何用Hibernate Criteria Query做同樣的事情? 這可能嗎?
這是正確的嗎? 「關係是一個房子可以有一個或多個房間。」 VS「return(Room)query.uniqueResult()」; – Prabhakaran
@ByteCode:對不起,這是錯字,我的意思是query.list()。 – null
你正在搜索房間的ID基於房間,所以我認爲criteria.uniqueResult();是正確的。 – Prabhakaran