6.1 Pertanyaan Dinamakan

Hibernate membolehkan anda tidak menyimpan pertanyaan secara langsung dalam kod. Sebaliknya, dia mencadangkan memberikan nama pertanyaan dan menyimpannya secara berasingan sebagai anotasi. Nah, kemudian ambil permintaan yang diingini secara 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 boleh ditambah sebelum mana-mana kelas Entiti: nama pertanyaan tidak terikat dengan mana-mana Entiti.

Anda juga boleh menambah pelbagai parameter pada pertanyaan (pertanyaan):

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

Menggunakan permintaan sedemikian adalah sangat mudah - untuk ini anda perlu menggunakan kaedah createNamedQuerydan bukannya kaedah createQuery:


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

6.2 NativeQuery

Dan satu lagi perkara yang mudah tetapi sangat berguna ialah NativeQuery .

Jika anda tidak mahu menggunakan HQL, tetapi ingin menggunakan Hibernate untuk pemetaan entiti, maka anda boleh menulis pertanyaan dalam SQL lama yang baik. Tiada siapa yang menghadkan anda.

Untuk melakukan ini, anda hanya perlu memanggil kaedah createNativeQuery(), bukannya createQuery().


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

Anda hanya menulis createNativeQuerydan semuanya akan berfungsi seperti sebelumnya. Kaedah ini mengembalikan objek jenis NativeQuery , yang menyokong semua kaedah yang disokong oleh kelas Query . Tiada apa yang akan berubah untuk anda.

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


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

Dan sudah tentu, berikut adalah kod untuk bekerja dengan mereka:


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