Eclipselink와 함께 Glassfish 3.1을 JPA 공급자로 사용할 수 있습니다. 다음 코드와 함께 상태없는 빈을 얻었고 테이블에 매핑 된 Folder 클래스를 얻었다. 각 폴더는 상위 폴더를 가질 수 있습니다.JPA 지연로드 이해
다음과 같은 코드가있는 Stateless Bean입니다.
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public List<Folders> getUserFolders() {
return folderDao.findFolders();
}
그리고 엔티티 클래스
public class Folder {
@ManyToOne(fetch=FetchType.LAZY)
private Folder parent;
@OneToMany(targetEntity=Folder.class, mappedBy="parent", fetch=FetchType.LAZY)
private List<Folder> childFolders;
}
은 상황에 따라 고려, 서블릿() 메소드를 모든 폴더를 얻고 폴더 호출 getChildFolders을 통해주기를의 반복이 빈을 호출합니다.
FINEST: Connection acquired from connection pool [read].
FINEST: reconnecting to external connection pool
FINE: SELECT ID, FOLDERNAME, POSITION, OWNER_ID, PARENT_ID FROM t_user_folder WHERE (PARENT_ID = ?)
bind => [1 parameter bound]
FINEST: Connection released to connection pool [read].
getChildFolders() 메서드 호출은 트랜잭션 메서드 외부에서 발생하므로 영구 컨텍스트가 이미 플러시됩니다. 그리고 왜 LazyInitializationException이 던져지지 않고 컨테이너가 어디에서 연결을 가져야 하는지를 어떻게 알 수 있는지 이해할 수 없습니다. 누군가가 그것을 설명해 줄 수 있습니까
'EntityManager'의'PersistenceContextType'은 무엇입니까? – CMR