2012-08-30 20 views
1

比方說,我有兩個實體如何過濾子實體而quering父休眠

public class EntityA 
{ 
    @id 
    @GeneratedValue 
    @Column(name="id") 
    private Long id; 

    @OneToMany(mappedBy="EntityA") 
    @JoinColumn(name = "entityA_id") 
    private List<EntityB> entityBList; 


} 

public class EntityB 
{ 
    @Column(name = "MODEL_PERCENT") 
    private BigDecimal modelPercent; 

    @ManyToOne 
    @joincolumn(name="entityA_id") 
    private EntityA entityA; 

} 

我現在想要的是什麼,當我取EntityA我想添加一個where子句的所有fetch EntityBs'的模型百分比大於0.

我不想使用過濾器,因爲此要求僅適用於此特定情況。

例如,數據:

EntitytA table 
id 
    1 
EntityB table 
id EntitytA_Id modelPercent 
    1  1   10 
    2  1   0 

我需要的方式,可能是獲取EntityA的HQL所以,當我說EntityA.getEntityBList() 它應該只返回1的記錄(一個其模型%的是10(大於零))。

我試過下面的查詢,但它似乎沒有工作。即它返回來自實體B的記錄

select a from EntityA a,IN(a.EntityBList) b where a.id =:id and b.modelPercent>0 

任何建議或指向某些示例會有很大的幫助。

感謝

回答

0

1)你必須在映射
EntityA錯誤 - 具有同時
EntityB財產和現場訪問 - 還沒有ID,並在具有相同的屬性和字段訪問時間
2)HQL查詢

SELECT eA FROM EntityA LEFT JOIN eA.entityBList eB WHERE eA.id =:id AND eB.modelPercent > 0 
+0

@llya我在屬性所有註釋只有水平。在示例代碼中,爲了清晰起見,我將它放在了不同的地方。我試過了前面提到過的查詢,不起作用:( – shashikanthb

+0

)讓我也編輯問題中的代碼 – shashikanthb

+0

錯誤或錯誤的結果? – Ilya