sql >> Database >  >> RDS >> Mysql

Hibernate-criteria met zelf-join

Misschien mogelijk met Hibernate's Criteria API, maar niet eenvoudig.

In een eenvoudig geval zou hetzelfde koppelingspad twee keer moeten worden toegevoegd (één voor A en één voor 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();

Dit werkt niet vanwege HHH-879 .

Maar u kunt een JPA-query gebruiken:

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();

Dit is nog minder code.

Ook:sommigen beschouwen de Criteria API als verouderd .




  1. Vergelijking van databasekolomtypen in MySQL, PostgreSQL en SQLite? (cross-mapping)

  2. Hoe meerdere afbeeldingen in laravel te uploaden

  3. Hoe de PostgreSQL-foutlogboeken te decoderen

  4. Hoe Oracle Stored Procedure in Python aan te roepen?