麻烦在groovy中使用Transactional注释

时间:2010-04-27 18:06:53

标签: hibernate spring groovy annotations transactional

有没有人对使用Groovy类的Spring事务(类级别,代理,注释驱动)有任何经验?我一直在努力解决一个无法解释的LazyInitialization异常,注意到stacktrace不包含启动事务的调用。听起来很疯狂,但我不得不怀疑Groovy是否接受了Transactional注释。

2 个答案:

答案 0 :(得分:1)

实际上我找到了问题的根源。从Spring文档(我强调添加):

  

24.5.1。 AOP - 建议脚本bean   可以使用Spring AOP框架来建议脚本bean。 Spring AOP框架实际上并不知道正在被建议的bean可能是一个脚本bean,因此您可能正在使用或打算使用的所有AOP用例和功能都适用于脚本bean。 在建议脚本化bean时,您需要注意一件事(小事)......您不能使用基于类的代理,您必须使用基于接口的代理。   您当然不仅限于为脚本bean提供建议......您还可以使用受支持的动态语言编写方面本身,并使用此类bean来建议其他Spring bean。这确实是动态语言支持的高级用法。

我的问题是我使用的是基于类的代理。

答案 1 :(得分:0)

如果您使用的是Grails,则可以尝试使用

MyDomainClass.withTransaction {    
  // Code within the transaction goes here
}

作为事务注释的替代方法。如果代码使用这种方法,那么你可以确定它是问题原因的注释(虽然我知道你可能不喜欢这个作为永久解决方案)。