Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kryteria hibernacji z samodołączaniem

Być może jest to możliwe dzięki interfejsowi Hibernate's Criteria API, ale nie jest to proste.

Prosty przypadek wymagałby dwukrotnego dołączenia tej samej ścieżki asocjacji (jedna dla A i jeden dla 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();

To nie zadziała z powodu HHH-879 .

Ale możesz użyć zapytania 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();

To jeszcze mniej kodu.

Ponadto:niektórzy uważają, że Criteria API to przestarzałe .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z przechowywaniem niemieckich słów w MySql DB....?

  2. MySQL do formatowania outfile

  3. Jak zoptymalizować widoki MySQL

  4. mysqli_query() oczekuje co najmniej 2 parametrów, 1 podany w?

  5. Błąd podczas ładowania modułu MySQLdb i instalacji pip MySQLdb