2009-08-19 69 views
2

我有一個Hibernate映射,看起來是這樣的:休眠條件包含式上的關聯表

<class name="MyEntity"> 
    <set name="scalarSet" table="(select fk, scalar_value from other_table)"> 
    <key column="fk"/> 
    <property column="scalar_value" type="long"/> 
    </set> 
</class 

鑑於此,我該如何查詢MyEntity.scalarSet這樣一個值(這是Set)在另一個集合中。

喜歡的東西:

criteria.add(Restrictions.in("scalarSet", targetList)); 

[編輯] 我也試過Restriction.sqlRestriction(..)。我使用的SQL查詢是這樣的:

"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})" 

其中,「{?擴大}」是由逗號分隔的問號代替(取決於targetList.size())。

但我剛開

產生的原因:org.hibernate.MappingException:採集是不是關聯:MyEntity.scalarSet

回答

3

你集是一個集合,而不是關聯映射 - 有微妙但重要的區別。使用Hibernate的查詢API的集合目前是not supported

您需要可以使用HQL,或通過創建具有長期性質的實體使用一個一對多的關聯映射,例如:

public class Scalar { 
    private Long value; 
    public Long getValue() { .... } 
    public void setValue(....) { ....} 
} 
+1

感謝,後入侵hibernate的來源,這是我最終做的:-) – 2009-09-04 10:36:57

2

然而,有人寫了一patch可能會或可能沒有結束在休眠3.4