24 Eylül 2013 Salı

Hibernate Extra Lazy Collection

OneToMany ilişkilerde Hibernate List arayüzünü gerçekleştiren PersistentBag sınıfını kullanır. 
Bu sınıfın size() metodu aşağıdaki gibidir.

Eğer OneToMany  ilişki lazy tanımlanmış ise yukarıdaki kodda görülen readSize metodu aşağıdaki
if (persister.isExtraLazy()){...} dalına girmez . Grimediği için de en alttaki read() metodunu çağırır ve false döner. Dolayısıyla aşağıdaki gibi bir  Sql cümlesinin çalışmasına sebep olur.

select * from child where child.parentID = ?

Eğer ilişki @LazyCollection(LazyCollectionOption.EXTRA) anotasyonu ile extra lazy olarak tanımlı ise bu sefer if (persister.isExtraLazy()){...}dalına girer ve aşağıdaki gibi bir  Sql cümlesinin çalışmasına sebep olur.
select count(ID) from child where child.parentID =?

.Net
.Net ile Lazy sınıfı geliyor. Bu sınıf aslında PersistentBag ile benzeşiyor. Örneğin veritabanından lazy yükleme yapmak için aşağıdaki gibi yapabiliriz.

Lazy<List<Order>> orders = new Lazy<List<Order>>(() => LoadOrders()); 

List<Order> LoadOrders()
{...}


Hiç yorum yok:

Yorum Gönder