12 Ekim 2016 Çarşamba

Hibernate HQL eager fetch şeklinde sorgu oluşturma

Hibernate veya NHibernate ile HQL sorguları oluştururken bazen sonuçta bağlı tablolarında sorgu sonucunda getirilmesi gerekmektedir. Bu durumda 2 yöntem kullanabiliyoruz :
1. Sorgu içinde fetch ifadesi ile bağlı kayıtlar alınabilir. Şöyle ki:
select distinct o
from Order o
left join fetch o.orderLines
bu sorgudaki left join fetch ifadesi normal bir left join gibi çalışmanın yanında sorgunun sonucunda orderLines özelliğin değerleri de alınacaktır. Bu şekilde 2 ayrı sorgu ile sonuçlar alınacağına tek sorgu ile sonuç alınacaktır.

2. Sorguyu işe karıştırmayıp ama hibernate özellikleri ile bu bilgileri yükleyebiliriz:
Java: 
Query query = session.createQuery("from Order");
List result = query.list(Order.class);

C#:
Query query = session.CreateQuery("from Order");
IList<Order> result = query.List<Order>();
Bu sorgu ile sonucu aldıktan sonra tek tek elemanlar üzerinden orderLines elemanının yüklenmesi sağlanabilir.
Java:
for(Order order : result) { 
    Hibernate.initialize(order.getOrderLines());
}

C#:
foreach(Order order as result) { 
    HibernateUtil.initialize(order.OrderLines);
}
 Bu işlem ile her eleman için ayrı sorgular oluşturulacak ve veri tabanına bir çok kere gidip gelmek gerekecektir.
Yorum Gönder