我有
Class A{
List <B> bList
}
Class B {
String name;
}
现在我想使用Hibernate标准API编写查询,这样我只能获得一个带有过滤的bList属性的Pojos,只有B pojo的
where "b.name" == 'abc'
答案 0 :(得分:5)
这是一件非常危险的事情,虽然Hibernate支持它,但它不是由JPA支持的,因为它加载的实体并不能反映数据库中存储内容的实际情况。如果您碰巧修改了B列表,Hibernate可能会删除所有与A无关但尚未被查询加载的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);
答案 1 :(得分: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);
获得不同的A类
它向DB查询2次,可能不合适。如果还有其他选择,请纠正我。