在DAO层之外使用@ org.springframework.transaction.annotation.Transactional?

时间:2010-12-16 10:24:05

标签: java hibernate spring transactions

我有一个非常经典的问题:在DAO之外访问Lazy Collection,导致LazyInitializationException。

这是一个干净而合理的解决方案,使用@Transactional使用这些懒惰集合的DAO之外的一些服务方法吗?

由于

2 个答案:

答案 0 :(得分:7)

是的。知道哪些任务必须是工作单元(交易)的人才是服务,因为它是“了解”业务的人。

答案 1 :(得分:2)

Neuquino has the right answer,但它不是很清晰易懂,所以我会尝试改写它:

您通常需要一个服务方法的一个事务,这就是您使用@Transactional而不是DAO层注释服务层的原因。 (关于Spring @Transactional注释的好处是它独立于底层实现,因此服务层中通常不应该有特定于持久层的代码,例如不调用hibernate {{1} }或JPA Session)。单元测试DAO时,将EntityManager注释放在测试方法上(您的测试是服务,而不是DAO)。