我有一个非常经典的问题:在DAO之外访问懒加载集合,导致LazyInitializationException。
在服务层的某些方法中使用@Transactional
是否是一种干净且合理的解决方案,以便在DAO之外使用这些懒加载集合?
谢谢
我有一个非常经典的问题:在DAO之外访问懒加载集合,导致LazyInitializationException。
在服务层的某些方法中使用@Transactional
是否是一种干净且合理的解决方案,以便在DAO之外使用这些懒加载集合?
谢谢
是的,确实如此。知道哪些任务必须成为工作单元(事务)的人是服务,因为它是“了解”业务的人。
@Transactional
注解而不是在DAO层上加。Spring @Transactional
注解的好处是它独立于底层实现,因此服务层中通常不会有针对持久化层的特定代码,例如不会调用Hibernate的Session
或JPA的EntityManager
。在对DAO进行单元测试时,将@Transactional
注解放在测试方法上(你的测试是服务而不是DAO)。