2017-08-24 37 views
5

mam lazy @ManyToOne kolumna zakupu zdefiniowany jako:hibernacji @ManyToOne (pobranie = FetchType.LAZY) ignorowane

@ManyToOne(fetch = FetchType.LAZY) 
Sale sale = null 

Jednak, kiedy obciążenia jednostki db, zostaje załadowana bezpośrednio:

Purchase purchase = em.find(Purchase.class, id); 
PersistenceUnitUtil unitUtil = em 
     .getEntityManagerFactory() 
     .getPersistenceUnitUtil(); 
System.err.println(unitUtil.isLoaded(purchase, "sale")); 

To powróci true, mimo że pole nie powinno być jeszcze załadowane.

Co robię źle?

(hibernacji 4.3.11.Final)

Odpowiedz

1

Ponieważ jest to pole pustych. Hibernate nie może stwierdzić, czy wartość istnieje w db, czy nie, więc musi zapytać db, aby przypisać wartość null lub wartość do pola.

+0

Co mogę zrobić, aby temu zapobiec? –

+0

Nie tak wiele opcji, jakie znam. Jednym ze sposobów jest "oprzyrządowanie bajtów czasu budowania". http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazyproperties – kan

+0

Dlaczego więc ta funkcja jest dostępna nawet wtedy, gdy nie może nigdy nie działać? Próbowałem nawet 'nullable = false' bez żadnego efektu. –