两个答案:
a)不要这样做。使用@Transactional
在服务层或DAO层,但不能同时(服务层是通常的选择,因为你可能希望每一个服务方法一个交易)
b)如果这样做,会发生什么情况取决于注释的propagation
属性,@Transactiona
l并在本节中进行描述:10.5.7事务传播。基本上:PROPAGATION_required
意味着同一事务将用于两种方法,同时PROPAGATION_REQUIRES_NEW
开始新事务。
关于你的评论:
当然,我不断阅读并意识到,当我使用代理时,第二种方法将不会由事务代理管理,因此就像其他任何方法调用一样。
在你的情况下,这是不正确的(仅当两个方法都在同一类中时)。
如果一个bean有方法a
和b
,和a
电话b
,然后b
叫上实际的方法,而不是代理,因为它是从代理中调用(豆不知道它是代理到外面的世界)。
proxy bean
a() --> a()
|
V
b() --> b()
但是,在你的情况下,服务将具有注入的dao对象,该对象本身就是代理,因此你将遇到以下情况:
proxy bean
service a() --> a()
|
/---------/
|
V
dao b() --> b()