Hibernate jak załadować pola lazy fetch

0

Hej,

Mam problem z wymuszeniem załadowania pola które jest oznaczone jako FetchType.Lazy. Wykonująć zapytanie typu:

	entityMAnager.createQuery(
						"SELECT s FROM Subscription s join fetch s.config WHERE s.config.id = :naz", 
						Subscription.cla).setParameter("naz", 2);

Wtedy po zamknięciu sesji obiekt config jest dostępny.
Problem pojawia się gdy chcę użyć "SELECT new":

entityMAnager.createQuery(
						"SELECT new com.main.Pakiet(s) FROM Subscription s WHERE s.config.id = :naz", 
						Pakiet.class).setParameter("naz", 2);

Initializacja pola config działą dopeiro po odwołaniu się do niego bezpośrednio po wykonaniu zapytania. Zależy mi na tym aby obiekt był Od razu zainicjalizowany. (dodanie join fetch jak wyżej nie działa)

PRoszę o pomoc...

0

No to jak chcesz żeby pole było od razu zaciągnięte, to w modelu zmieniasz adnotację z LAZY na EAGER. Tylko uważaj, bo możesz od razu pół bazy zaciągnąć. Nie bez powodu domyślnym fetchem dla kolekcji w Hibernate jest LAZY.

EDIT: Jak nie możesz zmienić modelu, to możesz użyć Hibernate.initialize(obiekt.getKolekcjaKtoraJestDoZainicjowania)

0
  1. konfiguracji nie mogę zmienić
  2. Hibernate.initalize() też raczej nie jest dostępne wtym wypadku (entitymanager jest wstrzykiwany przez kontener)
  3. Jest to obiekt nie kolekcja

Obecnie implemnetacją JPA jest Hibernate ale może być zmienione w przyszłości dlatego Hibernate.initialize() odpada.

0

Pole obiekt jest nie inicjalizowane od razu? Dziwne, troche chyba nie widzę tego

0

nie jest bo jest oznaczone:

@Entity
@Table(name = "subscription")
public class Subscription {
	@Id
	int id;

	@ManyToOne(fetch = FetchType.LAZY) 
	@JoinColumn(name="sub_conf_id", referencedColumnName = "id")
	SubscriptionConfiguration config;
0

Artykuł na https://vladmihalcea.com/2016/09/13/the-best-way-to-handle-the-lazyinitializationexception/ traktuje o podobnym problemie podając dwa różne rozwiązania w zależności od tego czy zależy Ci na tym, aby móc modyfikować encję czy też nie. Może któreś z nich rozwiąże Twój problem.

0

niestety metody z tej strony działają tylko dla typów prostych a dla całych obiektów niestety nie

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