有没有人对使用Groovy类的Spring事务(类级别,代理,注释驱动)有任何经验?我一直在努力解决一个无法解释的LazyInitialization异常,注意到stacktrace不包含启动事务的调用。听起来很疯狂,但我不得不怀疑Groovy是否接受了Transactional注释。
答案 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
}
作为事务注释的替代方法。如果代码使用这种方法,那么你可以确定它是问题原因的注释(虽然我知道你可能不喜欢这个作为永久解决方案)。