我有一个用例,其中它调用以下内容:
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
public UserControl getUserControlById(Integer id){
return this.userControlRepository.getOne(id);
}
观察@Transactionalhas具有Propagation.REQUIRES_NEW,并且存储库使用getOne。当我运行该应用程序时,我收到以下错误消息:
Exception in thread "main" org.hibernate.LazyInitializationException:
could not initialize proxy - no Session
...
但是,如果我改变getOne(id)的findOne(id)一切工作正常。
顺便说一句,在用例调用getUserControlById方法之前,它已经调用了insertUserControl方法
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
public UserControl insertUserControl(UserControl userControl) {
return this.userControlRepository.save(userControl);
}
这两种方法都是Propagation.REQUIRES_NEW,因为我正在执行简单的审核控制。
我使用该getOne方法是因为它是在JpaRepository接口中定义的,并且我的Repository接口从那里扩展,所以我正在使用JPA。
该JpaRepository接口扩展自CrudRepository。该findOne(id)方法在中定义CrudRepository。
我的问题是:
为什么该getOne(id)方法失败?
什么时候应该使用该getOne(id)方法?
我正在使用其他存储库,并且都使用该getOne(id)方法并且都正常工作,只有当我使用Propagation.REQUIRES_NEW时,它才会失败。
根据getOne API:
返回对具有给定标识符的实体的引用。
根据findOne API:
通过其ID检索实体。
3)什么时候应该使用该findOne(id)方法?
4)建议使用哪种方法?
提前致谢。
慕的地6264312