6.1 Kueri Bernama

Hibernasi memungkinkan Anda untuk tidak menyimpan kueri secara langsung dalam kode. Sebagai gantinya, dia menyarankan untuk memberi nama kueri dan menyimpannya secara terpisah sebagai anotasi. Nah, kemudian ambil permintaan yang diinginkan langsung dengan namanya. Contoh:

@org.hibernate.annotations.NamedQueries({
    @org.hibernate.annotations.NamedQuery(name = "Employee_FindById",
  	query = "from Employee where id = :id"),
    @org.hibernate.annotations.NamedQuery(name = "Employee_FindAllEmployes",
  	query = "from Employee"),
    @org.hibernate.annotations.NamedQuery(name = "Employee_UpdateEmployeeName",
  	query = "Update Employee set name = :newName where id = :id"),
...
})

Anotasi dapat ditambahkan sebelum kelas Entitas mana pun: nama kueri tidak terikat dengan Entitas mana pun.

Anda juga dapat menambahkan berbagai parameter ke kueri (kueri):

@org.hibernate.annotations.NamedQuery(
  name = "Employee_ FindAllEmployes",
  query = "from Employee",
  timeout = 1,
  fetchSize = 10,
  cacheable = true,
  cacheMode = "GET"
)

Menggunakan permintaan seperti itu sangat sederhana - untuk ini Anda perlu menggunakan metode createNamedQueryalih-alih metode createQuery:


Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();

6.2 NativeQuery

Dan hal sederhana namun sangat berguna lainnya adalah NativeQuery .

Jika Anda tidak ingin menggunakan HQL, tetapi ingin menggunakan Hibernate untuk pemetaan entitas, Anda dapat menulis kueri dalam SQL lama yang bagus. Tidak ada yang membatasi Anda.

Untuk melakukan ini, Anda hanya perlu memanggil metode createNativeQuery(), bukan createQuery().


NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();

Anda tinggal menulis createNativeQuerydan semuanya akan berjalan seperti semula. Metode ini mengembalikan objek bertipe NativeQuery , yang mendukung semua metode yang didukung oleh kelas Query . Tidak ada yang akan berubah untuk Anda.

Selain itu, Native SQL Query juga dapat disimpan sebagai Named Queries .


@org.hibernate.annotations.NamedNativeQueries(
    @org.hibernate.annotations.NamedNativeQuery(name = "Employee_GetAll",
  	query = "select * from employee",
  	resultClass = Employee.class)
)

Dan tentu saja, inilah kode untuk bekerja dengan mereka:


NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();