Mysql
 sql >> Database >  >> RDS >> Mysql

Criteri di ibernazione con accesso automatico

Forse possibile con l'API Criteria di Hibernate, ma non semplice.

Un caso semplice richiederebbe l'unione dello stesso percorso di associazione due volte (una per A e uno per 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();

Questo non funzionerà a causa di HHH-879 .

Ma puoi usare una query 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();

Questo è ancora meno codice.

Inoltre:alcuni considerano l'API dei criteri obsoleto .