![](/img/trans.png)
[英]Is it possible to mark one method of an entire @Transactional class as non-transactional
[英]Lazy loading working in non-transactional class/method in Hibernate
我正在使用Spring-Hibernate
应用程序。 流程照常: Controller --> Service --> DAO
。
我用@Transactional
注释了Service层类,从而标记了该类中的每个事务方法。在service类中,我进行了DAO
调用以获取某些域对象,然后将其转换为DTO/VO
对象,该对象将传递给controller。将域对象转换为DTO
,我编写了另一个自定义静态类(仅具有静态方法的类),例如ObjectMapper
,它将进行此转换。
现在,域对象有一些子对象( One to Many
)被延迟加载。 因此,在ObjectMapper
,当我访问该子getter方法时,将发出一个额外的数据库调用,该调用工作正常。 我不明白的是,由于ObjectMapper
不是transactional
,所以我期望在抛出数据库调用以从数据库中获取子对象时Session is closed
,从而引发一些异常。我正在DAO
使用Session Factory
getCurrentSession
。
有人可以向我解释这种行为吗?
我想您要么从事务性Service方法调用ObjectMapper(否则就应该调用),否则,可能启用了“ hibernate.enable_lazy_load_no_trans”,从而使休眠会话保持打开状态
只要在DAO的事务方法中进行了对转换您的对象的静态类/方法的调用,该会话仍处于打开状态,并将用于数据库调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.