延迟加载在Hibernate中的非事务性类/方法中工作

时间:2015-09-30 07:17:11

标签: java spring hibernate spring-transactions

我在Spring-Hibernate申请中工作。流程与往常一样:Controller --> Service --> DAO

我注释了带有@Transactional的服务层类,从而在该类中标记了每个事务处理方法。在服务类中,我进行了DAO调用以获取一些域对象,然后将其转换为{{ 1}}将被传递给controller的对象。为了将域对象转换为DTO/VO,我编写了另一个自定义静态类(只有静态方法的类),如DTO,它将执行此转换。

现在,域对象有一些延迟加载的子对象(ObjectMapper)。因此,当在One to Many中,我访问该子getter方法时,会发出额外的数据库调用,这正常工作。 我不明白的是,由于ObjectMapper不是ObjectMapper,我期待在调用数据库从数据库中获取子对象时,会抛出一些异常transactional。我正在使用Session is closedgetCurrentSession的{​​{1}}。

有人可以解释一下这种行为吗?

2 个答案:

答案 0 :(得分:1)

我想你要么从事务服务方法调用你的ObjectMapper(你应该),如果没有,也许你启用了“hibernate.enable_lazy_load_no_trans”来保持hibernate会话打开

答案 1 :(得分:0)

只要在DAO的事务方法中调用转换对象的静态类/方法,会话仍然是打开的,并将用于数据库调用。