2009-01-11 36 views
2

我有一個被映射爲有一組對象的對象,非常簡單。但是,我真正想要做的是在該映射上添加一些標準。下面是當前映射:如何在Hibernate中實現基於自定義查詢的集合映射?

<set name="ops" inverse="true" cascade="all, delete-orphan"> 
     <key column="cityblock_id" on-delete="cascade"/> 
     <one-to-many class="com.tamedtornado.data.Operation"/> 
    </set> 

現在,而不是剛開所有相關的OPS,我只想讓那些沒有完成OPS,或有,或什麼的。 Hibernate文檔在這方面非常安靜,雖然一些舊的論壇帖子已經顯示了我一點。你顯然可以使用sql-query標籤,但這也不是我想要做的。

有沒有辦法用HQL查詢來做到這一點?我只是想拉近與一個簡單的查詢結果,並有幾個收藏的地圖,像active_ops和completed_ops等

乾杯, 傑森

回答

3

下在Hibernate文檔6.2. Collection mappings您會發現可以在任何集合映射上使用WHERE子句:

其中(可選)指定檢索或刪除集合時要使用的任意SQL WHERE條件(如果集合只包含可用數據的一個子集,則有用)

您說過要使用HQL查詢但我不認爲這是可能的。但是,由於您只需在映射中指定一個簡單的WHERE子句,因此HQL和「真實」SQL之間並無太大差別。

0

我不知道如果我理解你的問題清楚,但它似乎像你需要在你的SQL查詢中使用where子句

您應該能夠使用where子句中的HQL或使用標準的API Hibernate來達到預期的效果:

假如你有一個字段所謂的「主動」或「完成」你的HQL狀態應該看起來像l IKE在此:

from ops where status="active" 

,或者如果使用標準的API:

List activeOperations = sess.createCriteria(Operation.class) 
    .add(Restrictions.equals("status", "active")) 
    .list(); 

第14章及休眠教程15談談這一點: http://www.hibernate.org/hib_docs/v3/reference/en/html/index.html

相關問題