6.1 NamedQueries
Hibernate имкон медиҳад, ки дархостҳо дар код на нигоҳ дошта шаванд. Ба ҷои ин, он пешниҳод мекунад, ки ба дархостҳо номҳо диҳем ва онҳоро алоҳида ҳамчун аннотация нигоҳ дорем. Ва пас аз он, дархости лозимаро мустақиман тавассути номи он бигирем. Намуна:
@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 вобаста нестанд.
Инчунин ба дархост (query) метавон параметрҳои гуногун илова кард:
@org.hibernate.annotations.NamedQuery(
name = "Employee_ FindAllEmployes",
query = "from Employee",
timeout = 1,
fetchSize = 10,
cacheable = true,
cacheMode = "GET"
)
Истифодаи чунин дархостҳо хеле осон аст – барои ин бояд методу createNamedQuery
ба ҷои методи createQuery
истифода шавад:
Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();
6.2 NativeQuery
Ва боз як чизи оддӣ, лекин бисёр муфид – NativeQuery.
Агар HQL истифода кардан нахоҳӣ, лекин бихоҳӣ, ки Hibernate барои маппинги объектҳо истифода шавад, метавонӣ дархостҳо дар SQL-и кӯҳна нависӣ. Ҳеҷкас туро маҳдуд намекунад.
Барои ин танҳо бояд методу createNativeQuery()
ба ҷои createQuery()
даъват шавад.
NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();
Ту танҳо createNativeQuery
менависӣ ва ҳама чиз мисли пешина кор мекунад. Ин метод объекти навъи 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)
)
Ва албатта, код барои кор бо онҳо оварда мешавад:
NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();
GO TO FULL VERSION