6.1 Наименувани заявки

Hibernate ви позволява да не съхранявате заявки директно в codeа. Вместо това той предлага да се дават имена на заявките и да се съхраняват отделно като анотации. Е, тогава вземете желаната заявка директно по нейното име. Пример:

@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"),
...
})

Анотациите могат да се добавят преди всеки клас Entity: имената на заявките не са обвързани с нито един Entity.

Можете също да добавите различни параметри към заявката (заявка):

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

Използването на такива заявки е много просто - за това трябва да използвате метод createNamedQueryinstead of метод createQuery:


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

6.2 NativeQuery

И още едно просто, но много полезно нещо е NativeQuery .

Ако не искате да използвате HQL, но искате да използвате Hibernate за съпоставяне на обекти, тогава можете да пишете заявки в добрия стар SQL. Никой не те ограничава.

За да направите това, просто трябва да извикате метода createNativeQuery()instead of createQuery().


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

Просто пишете createNativeQueryи всичко ще работи Howто преди. Този метод връща обект от тип NativeQuery , който поддържа всички методи, поддържани от класа Query . Нищо няма да се промени за вас.

Освен това Native SQL Query може също да се съхранява като Named Queries .


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

И разбира се, ето codeа за работа с тях:


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