静态util方法

时间:2017-01-27 14:13:20

标签: java hibernate

我有服务:

@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的实现中,通过LAZY对象检索各种EAGER个集合:

public static void calculateNewState(MyObject myObject) {
  List<MyOtherObject> otherObjects = myObject.getEagerObject().getMyLazyCollection();
  //etc

  myObject.setStatus(calculatedNewStatus);
}

但是我在调​​用getMyLazyCollection时遇到了延迟初始化异常。这个集合是@ElementCollection,如果这有任何区别的话。

我知道该对象需要附加到Hibernate会话才能使代理可以进入数据库,但我不了解该对象是如何分离的。

我尝试了以下配置&#39;方法calculateNewState:

  • 没有注释的util类的静态方法(如上例所示)
  • @Component中实施
    • @Transactional
    • @Transactional(PROPAGATION_MANDATORY)
    • 没有@Transactional

它们都会导致相同的异常:&#34;无法初始化代理 - 没有会话&#34;

我做错了什么?

calculateNewState方法的目的是在对象的状态被持久化到数据库之前计算它 - 我只是希望共享逻辑,以便可以从各种不同的方法调用它更改对象的数据。

修改

为了澄清,静态方法根本没有注释,只能从注释为@Transaction的方法内部调用。传递给静态方法的对象是从@Transaction方法中的DAO加载的。

0 个答案:

没有答案