有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

静态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) 个答案