2012-02-06 92 views

回答

5

這是一件非常危險的事情,儘管它受Hibernate支持,但它不是由JPA支持的,因爲它加載的實體並不能反映存儲在數據庫中的實體。如果您碰巧修改了B的列表,Hibernate可能會刪除所有B到B的B,但尚未被查詢加載。

也就是說,這是一個提取模式簡單內連接:

Criteria c = session.createCriteria(A.class, "a"); 
c.createAlias("a.b", "b"); 
c.add(Restrictions.eq("b.name", "abc"); 
c.setFetchMode("a.b", FetchMode.JOIN); 
+0

所以它很好,如果我們只讀正確的? – digz6666 2014-06-11 09:55:26

+0

除非您向用戶顯示不正確的數據,否則會根據此不正確的數據做出災難性決策。 – 2014-06-11 10:08:12

0

我試過上面的代碼,並在我看來,它不過濾的B集合。

我終於做到了在類中添加額外的濾波器A

@FilterDef(name="BFilter", 
parameters= @ParamDef(name="bName", type="string")) 
Public class A{ 

    @Filter(
     name = "BFilter", 
     condition="name = :bName" 
    ) 
    private List<B> bList; 
} 

,然後我用setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 得到不同類

它查詢2次,DB和可能是不希望。如果有其他選擇,請糾正我。