1
使用Glassfish 3.1和Eclipselink作爲JPA提供程序。使用下面的代碼和文件夾類將無狀態bean映射到表。每個文件夾可以有它的父文件夾。瞭解JPA懶加載
無狀態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;
}
考慮下面的情況,Servlet的調用這個bean來獲取所有文件夾和迭代週期中在文件夾中調用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 2011-04-01 13:05:26