Spring Data JPA: Query Methods & JPQL
Penjelasan
Selain method CRUD dasar, Spring Data JPA bisa men-generate query CUSTOM cukup dari NAMA METHOD-nya (disebut query derivation) — mis. findByNamaContaining(String nama) otomatis jadi query LIKE, TANPA implementasi manual. Untuk query yang terlalu kompleks buat derivation, dipakai @Query dengan JPQL (mirip SQL tapi mengoperasikan Entity Java, bukan tabel langsung).
Contoh Konsep
public interface ProdukRepository extends JpaRepository<Produk, Long> {
// Query derivation dari nama method:
List<Produk> findByHargaGreaterThanOrderByHargaDesc(double harga);
Produk findFirstByNamaContaining(String nama);
long countByStok(int stok);
// JPQL custom untuk query lebih kompleks:
@Query("SELECT p FROM Produk p WHERE p.harga > :minHarga AND p.stok > 0")
List<Produk> cariProdukTersedia(@Param("minHarga") double minHarga);
}
Praktikum
Tambahkan method query derivation findByJudulContainingOrderByCreatedAtDesc(String judul) ke ArtikelRepository yang mencari artikel berdasarkan judul (LIKE) diurutkan dari yang terbaru.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Nama method query derivation HARUS MENGIKUTI KONVENSI PENAMAAN KETAT (findBy, existsBy, countBy, diikuti nama field Entity dan keyword seperti Containing/GreaterThan/OrderBy) — kesalahan ketik nama field yang tidak sesuai Entity akan membuat aplikasi GAGAL START dengan pesan error yang menjelaskan method mana yang tidak bisa di-parse.