【发布时间】:2019-05-10 13:31:24
【问题描述】:
我正面临着如此多的讨论“”
我正在使用 hibernate 开发一个 spring boot 应用程序。
据我所知,如果一个实体的属性被标记为 FetchType.LAZY,需要有一个 Hibernate 会话才能触发相应的查询来带来相关的实体。
以下是从父实体检索实体列表的方法:
@Transactional
public List<Portfolio> getSharedPortfolios(String userName){
User user = userService.getUserActive(userName);
List<Portfolio> sharedPortfolios = user.getSharedPortfolios();
//logger.debug("Number of Shared Portfolios: " + sharedPortfolios.size()); <======
return sharedPortfolios;
}
getSharedPortfolios 方法正在从控制器调用并获取“org.hibernate.LazyInitializationException”,然后尝试访问此列表(PersistentBag)
作为使用@Transactional 注释注释的getSharedPortfolios 方法,我期待在执行 user.getSharedPortfolios()(sharedPortfolios 是一个惰性获取列表)时,会初始化相应的列表。但并没有发生这种情况。
谁能给我解释一下为什么?为什么如果我取消注释打印该 PersistentBag 大小的日志行,则不会引发异常?
在这种情况下我是否需要使用 EntityManager 显式初始化它?
非常感谢。
【问题讨论】: