6.1 Mga pinangalanang Query

Hinahayaan ka ng hibernate na huwag mag-imbak ng mga query nang direkta sa code. Sa halip, iminumungkahi niya ang pagbibigay ng mga pangalan ng mga query at iimbak ang mga ito nang hiwalay bilang mga anotasyon. Well, pagkatapos ay kunin ang nais na kahilingan nang direkta sa pamamagitan ng pangalan nito. Halimbawa:

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

Maaaring magdagdag ng mga anotasyon bago ang anumang klase ng Entity: ang mga pangalan ng query ay hindi nakatali sa anumang Entity.

Maaari ka ring magdagdag ng iba't ibang mga parameter sa query (query):

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

Ang paggamit ng mga naturang kahilingan ay napaka-simple - para dito kailangan mong gumamit ng isang paraan createNamedQuerysa halip na isang paraan createQuery:


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

6.2 NativeQuery

At isa pang simple ngunit napaka-kapaki-pakinabang na bagay ay NativeQuery .

Kung hindi mo gustong gumamit ng HQL, ngunit nais mong gamitin ang Hibernate para sa pagmamapa ng entity, maaari kang magsulat ng mga query sa magandang lumang SQL. Walang naglilimita sa iyo.

Upang gawin ito, kailangan mo lamang na tawagan ang pamamaraan createNativeQuery(), sa halip na createQuery().


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

Magsulat ka lang createNativeQueryat lahat ay gagana tulad ng dati. Ang pamamaraang ito ay nagbabalik ng isang bagay na may uri ng NativeQuery , na sumusuporta sa lahat ng mga pamamaraan na sinusuportahan ng klase ng Query . Walang magbabago sayo.

Bilang karagdagan, ang Native SQL Query ay maaari ding iimbak bilang Named Query .


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

At siyempre, narito ang code para sa pakikipagtulungan sa kanila:


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