JavaRush /Курсхо /All lectures for TG purposes /Намудҳои дигари дархостҳо

Намудҳои дигари дархостҳо

All lectures for TG purposes
Сатҳи , Дарс
дастрас

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();

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION