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

menggunakan pesanan mysql per kasus dalam kriteria hibernasi

Saya rasa saya menemukan solusi.

Pada akhirnya saya membuat subkelas Order saya sendiri dan mengesampingkan metode String toSqlString(Criteria,CriteriaQuery) publik:

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) {
    final String[] columns = criteriaQuery.getColumnsUsingProjection( criteria, getPropertyName() );
    final StringBuilder fragment = new StringBuilder();
    fragment.append(" case ").append(columns[0]);
    fragment.append(" when 'pending' then 1 ");
    fragment.append(" when 'approved' then 1 ");
    fragment.append(" else 2 end");
    return fragment.toString();
}

panggilan penting (yang saya temukan dalam implementasi asli dari kelas pesanan) adalah

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Yang memberi saya akses ke alias untuk kolom yang ingin saya pesan menggunakan pernyataan kasus.

Jika ada orang lain yang melihat ini, jika Anda memesan pada properti yang tidak berada di objek root, maka pastikan Anda menggunakan alias dalam gabungan kriteria Anda dan bahwa Anda kemudian mereferensikan alias tersebut dengan benar di Nama properti Pesanan kustom Anda saat Anda buat contoh itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batas kondisi MySQL IN

  2. Pernyataan yang disiapkan PDO/MYSQL tidak keluar dari karakter?

  3. Ambil data yang diubah setelah halaman diperbarui

  4. Kosongkan tabel MySQL setiap jam

  5. mysql ujung depan, menghapus baris