Ana içeriğe atla

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.

Yorumlar

Bu blogdaki popüler yayınlar

Babamın durumu

Babam Mart 2017 de zatüreden hastanede yatmıştı. Bu sırada ciğerlerde bir kanser görülmüş. Bu kanserin ne olduğu ile ilgili tetkikler de başlamış. Zatüreden sonra hemen kanser ile ilgili işlemlere yoğunlaşıldı. Kalçada görülen bir kitle vardı. Ona da baktılar ama temiz çıktı. Kanser tedavisi olan kemoterapi hemen başladı. 14 haziranda ilk kemoterapi dozunu aldı. İlk günler iyiydi. 19 hazirandan itibaren durumu kötülemeye başlamış. En son 21 Haziran gecesi çok kötü olunca önce Torbalı Devlet Hastanesine götürüldü. Burada vücudundaki sodyum'un çok azalmış olmasından dolayı hemen sodyum takviyesi yapıldı. Sodyum takviyesi ancak bir oranda etkili olduktan sonra yine kötü duruma geri dönüş yapmış. Bu yüzden Bozyaka araştırma hastanesine sevkedildi. Bozyaka da önce dahiliye yoğun bakıma alındı. Ancak burada bir süre kalbi durmuş ve kalp masajı ile geri getirmişler. Sonrada genel yoğun bakıma aldılar.
Şu an yoğun bakımda hipotermi durumunda tutuluyor. Bu uygulanan tedavilerden biri. Diğer…

Azure Cosmos DB Emulator Çalışmıyor.

Merhaba, Bugün Azure Cosmos DB'ye bir göz attım. Kullanımını anlamak için kendi bilgisayarımıza bir emulator(Azure Cosmos DB Emulator) kurabiliyoruz. Bunu kurup çalıştırdığımda DocumentDB.StartupEntryPoint.exe'nin hata verdiğini gördüm. Hatanın detayını eventviewer'dan şöyle gördüm:

Git'te GitCredentialWinStore ile ilgili alınan hatanın çözümü

Git kurulumundan sonra remote(sunucu) ile ilgili işlemler yaptığınızda session açık olsada tekrar tekrar kullanıcı adı ve şifre soruyor ve mesaj ekranında aşağıdaki gibi bir hata alıyorsanız:
"C:\Program Files (x86)\GitExtensions\GitCredentialWinStore\git-credential-winstore.exe" erase: C:\Program Files (x86)\GitExtensions\GitCredentialWinStore\git-credential-winstore.exe: No such file or directory bu durumda  git'in şifre saklama sisteminde bir problem oluştuğunu görmekteyiz. Bunun çözümü olarak öncelikle https://github.com/Microsoft/Git-Credential-Manager-for-Windows adresinden Windows için git şifre yönetim aracını indirmeniz ve kurmanız gerekiyor. Dosyanın tam indirme linki :
https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases
şeklindedir. Güncel versiyonu buradan indirip kurduktan sonra GIT BASH ile 2 satırlık bir işlem yapmamız gerekiyor.

1. öncelikle git'in geçerli şifre yöneticisini siliyoruz :

git config --global --unset credential.helper