Pobieranie kolekcji dzieci tej samej klasy (HIbernate)

Pobieranie kolekcji dzieci tej samej klasy (HIbernate)
0

Cześć, mam coś takiego

Kopiuj
 
create table a(
 id number(10, 0)
 parent_id number(10, 0),
 primary key(id)
);
Kopiuj
 
@Entity
@Table(name = "a")
public class A{
    @Id
    @Column(name = "id")
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    private Set<A> ch;
}

teraz chcę pobrać dzieci:

Kopiuj
A a = dao.get(10);
a.getCh();

i mam failed to lazily initialize a collection. Wiem dlaczego, ale nie wiem jak to przeskoczyć. Jest jeszcze

Kopiuj
Hibernate.initialize();

jednak tu mam komunikat o braku sesji.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Ech.

  • albo nie robisz kolekcji lazy
  • albo wyciągasz dane za pomocą HQLa i robisz fetch join w zapytaniu
  • albo w dao zaraz po wyciągnięciu tego obiektu przelatujesz po tej kolekcji żeby się załadowała (odradzam bo to automatycznie generuje klasyczne n+1 selectów!)

Poprawnym rozwiązaniem jest opcja nr 2.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
0

Dzięki. Z opcją 2 działa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.