使用 JPA 2 Criteria Join 方法,我可以执行以下操作:
//Join Example (default inner join)
int age = 25;
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Team> c = cb.createQuery(Team.class);
Root<Team> t = c.from(Team.class);
Join<Team, Player> p = t.join(Team_.players);
c.select(t).where(cb.equal(p.get(Player_.age), age));
TypedQuery<Team> q = entityManager.createQuery(c);
List<Team> result = q.getResultList();
我怎样才能用 fetch 方法做同样的事情,我希望 Fetch 接口有路径导航的 get 方法,但它没有:
//Fetch Join Example
int age = 25;
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Team> cq = cb.createQuery(Team.class);
Root<Team> t = cq.from(Team.class);
Fetch<Team,Player> p = t.fetch(Team_.players);
cq.where(cb.equal(p.get(Player_.age), age)); //This leads to compilation error there is no such method get in interface Fetch
TypedQuery<Team> q = entityManager.createQuery(cq);
List<Team> result = q.getResultList();
根据 Hiberante 文档,fetch 返回一个错误的 Join 对象。 http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/querycriteria.html#querycriteria-from-fetch
原文由 Alfredo Osorio 发布,翻译遵循 CC BY-SA 4.0 许可协议
同意您关于该方法的看法,以及您希望它允许您所说的事实。另一种选择是
即做一个
join()
,为它添加一个fetch()
,然后使用连接。这是不合逻辑的,只会增加 JPA Criteria 的不雅本质,但无论如何,应该是一种解决方法