静态util方法中的java惰性初始化异常
我有一项服务:
@Override
@org.springframework.transaction.annotation.Transactional
public Seller doSomething(MyDto myDto) {
final MyObject myObject = myDao.findById(myDto.getId());
//do various things to myObject
StateChooser.calculateNewState(myObject);
}
在calculateNewState
的实现中,通过EAGER
对象检索各种LAZY
集合:
public static void calculateNewState(MyObject myObject) {
List<MyOtherObject> otherObjects = myObject.getEagerObject().getMyLazyCollection();
//etc
myObject.setStatus(calculatedNewStatus);
}
但是我在调用^{@ElementCollection
,如果这有什么不同的话
我知道该对象需要连接到Hibernate会话,以便代理可以访问数据库,但我不明白该对象是如何分离的
我尝试了calculateNewState方法的以下“配置”:
- util类的静态方法(如上面的示例所示),没有注释
- 在
@Component
中实现- 用
@Transactional
- 用
@Transactional(PROPAGATION_MANDATORY)
- 没有
@Transactional
- 用
它们都会导致相同的异常:“无法初始化代理-无会话”
我做错了什么
calculateNewState
方法的目的是在对象被持久化到数据库之前计算对象的状态——我只想共享逻辑,以便可以从改变对象数据的各种不同方法调用它
编辑
只是澄清一下,静态方法根本没有注释,只从用@Transaction
注释的方法内部调用。传递给静态方法的对象是从@Transaction
方法内的DAO加载的
共 (0) 个答案