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.
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.
.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()
{...}
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