sql >> Databáze >  >> RDS >> Mysql

Kritéria hibernace s vlastním připojením

Možná je to možné pomocí rozhraní Hibernate's Criteria API, ale ne přímo.

Jednoduchý případ by vyžadoval, aby byla stejná přidružená cesta připojena dvakrát (jedna pro A a jeden pro 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();

Toto nebude fungovat kvůli HHH-879 .

Můžete však použít dotaz 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();

Toto je ještě méně kódu.

Také:Někteří považují Criteria API za zastaralé .




  1. Skript pro nalezení víceúrovňových závislostí balíčku

  2. Vytvořte jedinečné omezení s prázdnými sloupci

  3. 7 tipů osvědčených postupů pro hromadné načítání dat PostgreSQL

  4. Psycopg2 Vložit do tabulky se zástupnými symboly