我在Spring-Hibernate
申请中工作。流程与往常一样:Controller --> Service --> DAO
。
我注释了带有@Transactional
的服务层类,从而在该类中标记了每个事务处理方法。在服务类中,我进行了DAO
调用以获取一些域对象,然后将其转换为{{ 1}}将被传递给controller的对象。为了将域对象转换为DTO/VO
,我编写了另一个自定义静态类(只有静态方法的类),如DTO
,它将执行此转换。
现在,域对象有一些延迟加载的子对象(ObjectMapper
)。因此,当在One to Many
中,我访问该子getter方法时,会发出额外的数据库调用,这正常工作。
我不明白的是,由于ObjectMapper
不是ObjectMapper
,我期待在调用数据库从数据库中获取子对象时,会抛出一些异常transactional
。我正在使用Session is closed
中getCurrentSession
的{{1}}。
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
我想你要么从事务服务方法调用你的ObjectMapper(你应该),如果没有,也许你启用了“hibernate.enable_lazy_load_no_trans”来保持hibernate会话打开
答案 1 :(得分:0)
只要在DAO的事务方法中调用转换对象的静态类/方法,会话仍然是打开的,并将用于数据库调用。