【发布时间】:2011-06-06 21:17:45
【问题描述】:
我在这个数据模型中使用 JPA2/hibernate:
class Stock {
@ManyToOne
private StockGroup stockGroup;
private boolean visible;
}
class StockGroup {
@OneToMany(mappedBy = "stockGroup")
private List<Stock> stocks;
}
我想检索 StockGroup 的包含 Stock 的 visible==true。
我想出了这个错误的代码:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StockGroup> q = cb.createQuery(StockGroup.class);
Root<StockGroup> r = q.from(StockGroup.class);
Join<StockGroup, Stock> j = r.join(StockGroup_.stocks, JoinType.INNER);
Predicate p = cb.equal(j.get(Stock_.visible), true);
// This becomes a cartesian product :(
List<StockGroup> l = em.createQuery(q.where(p)).getResultList();
// Stocks are not filtered on visible :(
l.get(0).getStocks();
是否可以使用一个 CriteriaQuery 检索 StockGroup 和 Stock 对象,或者 JPA 一次只能填充一种类型?或者我可以在.getStocks() 被懒惰填充时添加一些标准吗?
【问题讨论】:
标签: java hibernate orm jpa jpa-2.0