6.1 Adlandırılmış Sorgular

Hazırda bekletme, sorguları doğrudan kodda depolamanıza izin vermez. Bunun yerine, sorgu adları vermeyi ve bunları ek açıklamalar olarak ayrı ayrı saklamayı önerir. O zaman istenen isteği doğrudan adına göre alın. Örnek:

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

Ek açıklamalar herhangi bir Entity sınıfından önce eklenebilir: sorgu adları herhangi bir Entity'ye bağlı değildir.

Sorguya (sorguya) çeşitli parametreler de ekleyebilirsiniz:

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

createNamedQueryBu tür istekleri kullanmak çok basittir - bunun için bir yöntem yerine bir yöntem kullanmanız gerekir createQuery:


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

6.2 Yerel Sorgu

Ve bir başka basit ama çok faydalı şey de NativeQuery .

HQL kullanmak istemiyor, ancak varlık eşleme için Hazırda Beklet'i kullanmak istiyorsanız, sorguları eski güzel SQL'de yazabilirsiniz. Kimse sizi sınırlamaz.

createNativeQuery()Bunu yapmak için, yerine yöntemi çağırmanız yeterlidir createQuery().


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

Sadece yazarsınız createNativeQueryve her şey eskisi gibi çalışır. Bu yöntem, Query sınıfının desteklediği tüm yöntemleri destekleyen NativeQuery türünde bir nesne döndürür . Senin için hiçbir şey değişmeyecek.

Ayrıca Native SQL Query, Adlandırılmış Sorgular olarak da saklanabilir .


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

Ve tabii ki, işte onlarla çalışmak için kod:


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