HQL bisa digunakan untuk NamedQuery yang otomatis akan di-compile pada saat
hibernate startup. Jadi ini cukup membantu karena mengurangi runtime error
(tergantung definisi runtime-nya).

Dengan NamedQuery juga berarti HQL bisa memanfaatkan fitur query cache.
Implementasi di belakangnya mungkin berupa PreparedStatement (ini dugaan
saja). Jadi query SQL tidak selalu digenerate on the fly, tapi hanya sekali
saja CMIIW.

Criteria otomotatis tidak mendapatkan manfaat dari NamedQuery. Jadi SQL
selalu digenerate on the fly pada saat dipanggil. Keuntungannya sangat
dinamis karena field yang akan di-compare bisa disusun saat runtime,
tergantung kondisi2 yang dibutuhkan.

Sepertinya untuk soal refactoring Criteria juga tidak membantu banyak. Hanya
bisa untuk refactoring class. Tapi kalau sudah refactoring field sepertinya
sama saja dengan HQL. Jadi untuk kasus ini safety net yang tepat adalah Unit
Test.


2010/2/4 Daniel Baktiar <dbakt...@gmail.com>

>
>
> menurut gue:
>
> kalau masih bisa pakai Criteria, lebih baik pakai Criteria. ada lebih
> banyak safeguard kalau menggunakan Criteria, walaupun belum mencapai apa yg
> diperlukan di tingkat ideal. alasannya maintanability.
>
>
> Criteria menggunakan java object, sehingga kalau model berubah, type
> checking dan refactoring berjalan dengan baik.
>
> bila menggunakan HQL, perubahan type, refactor dsb, akan gagal pada saat
> run time, bukan pada saat compile time.
>
> kalau untuk maintainability dan source code sudah ribuan class, disuruh
> memilih compile time error atau runtime error, saya akan pilih warning
> compile time.
>
> sekali lagi, seperti disebutkan di atas, walaupun menggunakan Criteria
> tidak menjamin bahwa semua perubahan yang tidak valid akan membuat compile
> time error bila menggunakan Criteria, tetapi masih lebih baik daripada
> menggunakan HQL. untuk HQL sebagian besar ketidakkonsistenan yg diakibatkan
> perubahan hanya akan muncul saat runtime.
>
>
> ada juga hal yang positif bila  menggunakan HQL semua, semua coding query
> akan memiliki konsistensi bentuk. query menggunakan Criteria bentuknya lebih
> variatif. dan bahasa HQL lebih powerful (bisa menentukan join criteria dan
> fetch strategy etc).
>
>

Kirim email ke