10 Mayıs 2018 Perşembe

JPA Query Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Query;
Bu sınıf JPQL veya "Native Sql Query" çalıştırabilir.
constructor
EntityManager tarafından yaratılır. Gerekirse Hibernate'e cast edilebilir. Şöyle yaparız.
org.hibernate.ejb.SQLQuery hq = (org.hibernate.ejb.HibernateQuery) query;
Örnek
Şöyle yaparız.
String hql = "...";
Query query = em.createQuery(hql);
Örnek
Şöyle yaparız.
String sql = "select * from mytable";
Query query = em.createNativeQuery(sql);
executeUpdate metodu
Nesneyi günceller. Şöyle yaparız.
Employee employee= (Employee)entityManager.find(Employee.class , 1);
 entityManager
     .createQuery("update Employee set name = \'xxxx\' where id=1")
     .executeUpdate();
getResultList metodu
Untyped List nesnesi yani generics kullanmayan List<Object[]> döner.
Örnek
Şöyle yaparız.
for(Object row : (List<Object>) q.getResultList()){
  ...
}
Örnek
Şöyle yaparız.
@SuppressWarnings("unchecked")
List<Patients> result = jpaQuery.getResultList();
getSingleResult metodu
Örnek
Şöyle yaparız.
String nativeSql = SELECT count(1) FROM my_table WHERE conditions;

Query query = entityManager.createNativeQuery(nativeSql);

int total = ((BigDecimal) query.getSingleResult()).intValue();
Örnek
Select cümlesini çalıştırarark tek bir nesne döndürür.
Status status = query.getSingleResult();
Eğer sonuç tek değilse exception atılır.
Query query = ...
try{
  return q.getSingleResult();
}catch(NoResultException| EntityNotFoundException enfex){
  return null;
}catch(NonUniqueResultException ex){
  return null;
}
}
list metodu
join fetch ile şöyle yaparız. Join Fetch lazy olan OneToMany ilişkilerde eager veri çekmek için kullanılır.
Query query = session.createQuery("select c from Category c join fetch c.events 
  where c.parentCategory.categoryId = 1");
//query.setParameter("id", id);
List<Foo> list = query.list();
setFirstResult metodu
Şöyle yaparız.
query.setFirstResult(...);
setMaxResults metodu
Şöyle yaparız.
query.setMaxResults();
setParameter metodu - named parameter
Parametreler :name şeklindedir. Sql cümlesi içinde parametrelere ismen erişir ve değer atar.
Örnek
Şöyle yaparız.
query.setParameter("param1",...);
Örnek
Şöyle yaparız.
entityManager.createQuery("select gne from Entity gne where type(gne) = :subclass")
  .setParameter("subclass", GivenNameEntity.class)
  .getResultList();
setParameter metodu - ordinal parameter
Parametreler ?index şeklindedir. Şöyle yaparız.
Date lastWeekDate = ...;

em.createQuery("SELECT o from Orders o WHERE o.orderDate > ?1")
  .setParameter(1, lastWeekDate, TemporalType.DATE);
scroll metodu
Select cümlesinin sonucunu dolaşabilmemizi sağlar. Şöyle yaparız.
ScrollableResults resultScroll = query.scroll(ScrollMode.FORWARD_ONLY);
unwrap metodu
Hibernate nesnesine dönüştürmek için şöyle yaparız.
entityManager.createNativeQuery("...")
  .unwrap(org.hibernate.Query.class)
  .setParameter("number", new Integer(number))
  .setParameter("userId", userId)
  .setParameter("startDate", startDate)
  .setParameter("endDate", endDate)
  .setResultTransformer(new MyClassTransformer())
  .list();

Hiç yorum yok:

Yorum Gönder