繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM