在@Transactional中会话会发生什么

时间:2014-06-05 15:46:52

标签: java spring hibernate session transactions

嗨,我一直在追踪办公室代码中的错误。它涉及Spring,Hibernate和Transactions。

我所知道的:
1.懒惰装载。
2. Spring如何使用代理和拦截器进行事务管理 3. Spring中的事务传播以及我们的代码使用默认的REQUIRED 4.每个请求/会话的会话和Hibernate的分离实体基础,以保持会话以及我们不是每次会话的会话这一事实。

我的情景: 我的代码中的一个方法(由其他人编写)使用@Transactional( - 调用方法a())并调用另一个使用Hibernate从DB加载客户的服务方法( - 调用方法b())。 b()上还有@Transactional。客户有许多Lazy字段,当控件返回方法a()时 - 由于会话已关闭,因此无法加载惰性字段。我不明白的是 - 当方法a()尚未完成时,为什么会话关闭?当b()完成时,Spring对会话做了什么?我不介意被指向网址。

我还有更多的问题,因为我现在正在讨论这个问题已经有一个星期了,但是如果不了解会议的内容,我不想弄脏这篇文章。

请建议。

1 个答案:

答案 0 :(得分:0)

将@Transactional保留在您的Service方法中。使getXXX()调用从相同的服务方法a()加载返回实体对象的延迟属性。还有另一个很酷的选择。 Hibernate获取配置文件。在实体上定义获取配置文件,并将其设置为从您的服务或dao激活。