Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kriteria Hibernasi dengan bergabung sendiri

Mungkin dapat dilakukan dengan API Kriteria Hibernate, tetapi tidak langsung.

Kasus sederhana akan membutuhkan jalur asosiasi yang sama untuk digabungkan dua kali (satu untuk A dan satu untuk 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();

Ini tidak akan berfungsi karena HHH-879 .

Tetapi Anda dapat menggunakan kueri 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();

Ini bahkan lebih sedikit kode.

Juga:Beberapa menganggap API Kriteria sebagai tidak digunakan lagi .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Di mana antara dua tanggal tanpa tahun?

  2. Ganti nama kolom di tabel mysql tanpa harus mengulang definisi tipenya

  3. Kesalahan MySql terjadi dalam semalam - Paket terakhir yang dikirim ke server adalah 0 ms yang lalu

  4. mengoptimalkan Query dengan dateiff() di mysql

  5. Cara terbaik untuk melakukan pencarian berbobot di beberapa bidang di mysql?