我有一个用例,它调用以下内容:
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
public UserControl getUserControlById(Integer id){
return this.userControlRepository.getOne(id);
}
观察到 @Transactional
有 REQUIRES _ NEW,存储库使用 得一。当我运行这个应用程序时,我收到以下错误消息:
Exception in thread "main" org.hibernate.LazyInitializationException:
could not initialize proxy - no Session
...
但是,如果我改变 getOne(id)
的 findOne(id)
所有的工作正常。
顺便说一句,就在用例调用 GetUserControlById方法之前,它已经调用了 SertUserControl 插入用户控件方法
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
public UserControl insertUserControl(UserControl userControl) {
return this.userControlRepository.save(userControl);
}
这两个方法都是 REQUIRES _ NEW,因为我正在做一个简单的 审计署控制。
我使用 getOne
方法是因为它是在 JpaRepository接口中定义的,我的 Repository 接口是从那里扩展的,当然我使用的是 JPA。
JpaRepository接口从 原油储藏库扩展而来。
findOne(id)
方法在 CrudRepository
中定义。
我的问题是:
getOne(id)
方法会失败?getOne(id)
方法?我与其他存储库和所有使用的 getOne(id)
方法和所有工作良好,只有当我使用的 REQUIRES _ NEW它失败。
根据 得一电视宣传短片:
返回对具有给定标识符的实体的引用。
根据 找到一个电视宣传短片:
根据实体的 id 检索实体。
什么时候应该使用 findOne(id)
方法?
建议使用什么方法?