2009-05-07 16 views
5

Tenekede ne yazıyor; Koleksiyonun yüklenmesini zorlamadan hazırda bir koleksiyonda değişiklik yapmak istiyorum çünkü büyük miktarda veri (~ 100.000 kayıt, monoton artış).Koleksiyonun yüklenmesine neden olmadan Hazırda bekletme sırasında tembel yüklü bir koleksiyona nasıl öğe ekleyebilirim?

Şu anda, bu listeye getEvents().add (newEvent) numaralı telefonu arayarak events adresinin neden oluğunu bildirerek bir öğe ekliyorum. İşte

haritalama var:

<bag name = "events" inverse = "true" cascade = "all-delete-orphan" 
order-by = "event_date desc" lazy = "true"> 
    <key> 
<column name = "document_id" length = "64" not-null = "true" /> 
    </key> 
    <one-to-many class = "EventValue" /> 
</bag> 
nasıl bu yapıyor olmalıdır

?

cevap

4

Bunu gerçekleştirmenin bir yolu, üst nesne (Ebeveynlik olarak adlandır) ve Etkinlik arasında çift yönlü bir ilişki oluşturmak ve ilişkiyi Etkinlik tarafından yönetilecek şekilde hazırda bulunan eşlemelerinizi yapılandırmak olabilir.

Bunu gerçekleştirmek için, hazırda eşleştirmeleri gibi görünecektir:

<class name="Parent"...> 
    ... 
    <bag name="events" lazy="true" inverse="true"...>...</bag> 
    ... 
</class> 

<class name="Event"...> 
    <many-to-one name="parent"> 
    ... 
</class> 

Ve kod görünecektir: Bu yardımcı olur

myEvent.setParent(parentObject); 
eventDao.save(myEvent); 

Umut. İyi şanslar.

+0

Nesne ile çalışma açısından ne gibi yan etkileri vardır? –

+0

Gerçekten, Parent.getEvents() öğesinin sonuçlarını nasıl ve ne zaman kullandığınıza bağlıdır. Ebeveynleri yeniden getirmeniz ve/veya önbelleğinden çıkarmanız gerekebilir ... ancak çoğu durumda, özel bir şey yapmanız gerekmeyecek ve "sadece çalışacak" olacak – blahspam

1

Yalnızca Olayı yerleştirin. etkinliklerinin tümünü okuma olabilir

@Entity 
public Document 
{ 
    @ManyToOne 
    Set<Event> events; 

    public void addEvent(Event event) 
    { 
     events.add(event) 
    } 

} 


@Entity 
public Event 
{ 
    @id 
    private long id; 

    @OneToMany 
    private Document doc; 

    .... 
} 

Seçenek:: Örneğin

Aradığınızda Sonra

event = new Event(); 
    event.setDocument(document); 
    insert(event); 

: koleksiyonunu dokunma olmaz

document.add(event); 
update(document); 

Seçenek document.getEvents() yeni olayı da sorgulayıp alır. Tek sorun, koleksiyon zaten okunmuşsa ve ardından olayı seçenek 2'ye göre eklerseniz. Bu durumda, koleksiyon zaten okunduğundan, getEvents() yeni olayı içermez.

+0

Temel olarak ne blahspam söylendi. – ccclark

İlgili konular