Pobieranie kolekcji dzieci tej samej klasy (HIbernate)

0

Cześć, mam coś takiego

 
create table a(
 id number(10, 0)
 parent_id number(10, 0),
 primary key(id)
);
 
@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:

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

Hibernate.initialize();

jednak tu mam komunikat o braku sesji.

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1