शायद हाइबरनेट के मानदंड एपीआई के साथ संभव है, लेकिन सीधे आगे नहीं।
एक साधारण मामले के लिए एक ही एसोसिएशन पथ को दो बार शामिल होने की आवश्यकता होगी (एक A . के लिए) और एक 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();
यह HHH-879 के कारण काम नहीं करेगा ।
लेकिन आप जेपीए क्वेरी का उपयोग कर सकते हैं:
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();
यह और भी कम कोड है।
साथ ही:कुछ लोग मानदंड API को बहिष्कृत ।