【发布时间】:2011-07-27 16:29:51
【问题描述】:
使用带有 Eclipselink 的 Glassfish 3.1 作为 JPA 提供程序。使用以下代码获得无状态 bean,并将文件夹类映射到表。每个文件夹都可以有它的父文件夹。
无状态 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是什么?
标签: java jpa ejb eclipselink