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