API Kriteria
Kriteria API lebih cocok untuk permintaan yang dihasilkan secara dinamis. Jadi, jika Anda ingin menambahkan filter klausa WHERE, GABUNG klausa, atau ubah klausa ORDER BY atau kolom proyeksi, maka API Kriteria dapat membantu Anda membuat kueri secara dinamis dengan cara yang juga mencegah serangan SQL Injection .
Di sisi lain, kueri Kriteria kurang ekspresif dan bahkan dapat menyebabkan kueri SQL yang sangat rumit dan tidak efisien, seperti yang dijelaskan dalam artikel ini .
JPQL dan HQL
JPQL adalah bahasa permintaan entitas standar JPA sementara HQL memperluas JPQL dan menambahkan beberapa fitur khusus Hibernate.
JPQL dan HQL sangat ekspresif dan menyerupai SQL. Tidak seperti Kriteria API, JPQL dan HQL membuatnya mudah untuk memprediksi permintaan SQL yang mendasarinya yang dihasilkan oleh penyedia JPA. Juga jauh lebih mudah untuk meninjau kueri HQL seseorang daripada yang Kriteria.
Perlu dicatat bahwa memilih entitas dengan JPQL atau API Kriteria masuk akal jika Anda perlu memodifikasinya. Kalau tidak, proyeksi DTO adalah pilihan yang jauh lebih baik.
Kesimpulan
Jika Anda tidak perlu memvariasikan struktur kueri entitas, maka gunakan JPQL atau HQL. Jika Anda perlu mengubah kriteria pemfilteran atau pengurutan atau mengubah proyeksi, maka gunakan API Kriteria.
Namun, hanya karena Anda menggunakan JPA atau Hibernate, itu tidak berarti Anda tidak boleh menggunakan SQL asli. Permintaan SQL sangat berguna dan JPQL dan API Kriteria bukan pengganti untuk SQL. Lihat artikel ini untuk detail lebih lanjut tentang topik ini.