Class A{
List <B> bList
}
Class B {
String name;
}
現在我想寫使用Hibrnate標準API查詢,這樣我只得到一個POJO的具有僅有B POJO的
where "b.name" == 'abc'
過濾bList屬性
Class A{
List <B> bList
}
Class B {
String name;
}
現在我想寫使用Hibrnate標準API查詢,這樣我只得到一個POJO的具有僅有B POJO的
where "b.name" == 'abc'
過濾bList屬性
這是一件非常危險的事情,儘管它受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);
我試過上面的代碼,並在我看來,它不過濾的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和可能是不希望。如果有其他選擇,請糾正我。
所以它很好,如果我們只讀正確的? – digz6666 2014-06-11 09:55:26
除非您向用戶顯示不正確的數據,否則會根據此不正確的數據做出災難性決策。 – 2014-06-11 10:08:12