moje pytanie dotyczy JPA 2.0 ze związkami Hibernate, @OneToOne i leniwym ładowaniem.JPA 2.0/Hibernate: Dlaczego LAZY pobiera z "@OneToOne" działa po wyjęciu z pudełka?
Pierwsza moja konfiguracja:
- Wiosna 3.0.5.RELEASE
- SprnigData JPA 1.0.1.RELEASE
- Hibernate 3.5.2-final
- DBMS: PostgreSQL 9.0
Niedawno natknąłem się na fakt, że relacji @OneToOne nie można pobrać leniwy sposób (FetchType.LAZY), przynajmniej nie bez kodu bajtowego instrumentatio n, kompiluj tkanie czasu lub tym podobne. Wiele witryn, powiedzieć to, na przykład:
- http://community.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one
- http://justonjava.blogspot.com/2010/09/lazy-one-to-one-and-one-to-many.html
- Making a OneToOne-relation lazy
Chodzi o to, z mojej konfiguracji, lazy loading podmiotu @OneToOne wydaje się działać "po wyjęciu z pudełka" i naprawdę chciałbym zrozumieć dlaczego. Proszę spojrzeć na moje testów jednostkowych:
@Test
@Transactional
public void testAvatarImageLazyFetching()
{
User user = new User();
user.setAvatarImage(new AvatarImage());
User = userRepository.save(user);
entityManager.flush();
entityManager.clear();
User loadedUser = userRepository.findOne(user.getId());
assertNotNull(loadedUser);
PersistenceUtil persistenceUtil = Persistence.getPersistenceUtil();
assertTrue(persistenceUtil.isLoaded(loadedUser));
assertFalse(persistenceUtil.isLoaded(loadedUser, "avatarImage"));
}
Sprawa ta próba się powiedzie, w Hibernacja wyjścia logowania SQL, widzę wyraźnie, że „avatarImage” nie będą pobierane, tylko „użytkownik” (tylko jeden SELECT, nie JOIN, nie ma dostępu do „AvatarImage” stół itd)
jednokierunkowy @OneToOne relationshop w klasie użytkownika wygląda następująco:
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private AvatarImage avatarImage;
Tak, wszystko bardzo proste - i wydaje się działać.
Aby powtórzyć moje pytanie: dlaczego to działa, dlaczego "AvatarImage" może być leniwie ściągany, mimo że jest powiązany ze stowarzyszeniem @OneToOne?
naprawdę wdzięczni za każdą pomoc można zaoferować
Dzięki wielkie!