Có thể có với API tiêu chí của Hibernate, nhưng không phải ngay lập tức.
Một trường hợp đơn giản sẽ yêu cầu cùng một đường dẫn liên kết phải được tham gia hai lần (một cho A và một cho P ):
Criteria gameCriteria = ((HibernateEntityManager) em).getSession().createCriteria(Game.class);
Criteria playedGamesOfACriteria = gameCriteria.createCriteria("playedGames", "pga");
Criteria accountOfACriteria = playedGamesOfACriteria.createCriteria("account", "a");
accountOfACriteria.add(Restrictions.idEq(a.id));
Criteria playedGamesOfPCriteria = gameCriteria.createCriteria("playedGames", "pgp");
Criteria accountOfPCriteria = playedGamesOfPCriteria.createCriteria("account", "p");
accountOfPCriteria.add(Restrictions.idEq(p.id));
return gameCriteria.list();
Điều này sẽ không hoạt động do HHH-879 .
Nhưng bạn có thể sử dụng truy vấn JPA:
Query q = em.createQuery(
"select g "
+ "from Game g "
+ "join g.playedGames pga "
+ "join pga.account a "
+ "join g.playedGames pgp "
+ "join pgp.account p "
+ "where a = ?1 and p = ?2"
);
q.setParameter(1, a);
q.setParameter(2, p);
return q.getResultList();
Đây thậm chí còn ít mã hơn.
Ngoài ra:Một số coi API tiêu chí là không dùng nữa .