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:
2. Sorguyu işe karıştırmayıp ama hibernate özellikleri ile bu bilgileri yükleyebiliriz:
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.
Yorumlar