我在 Spring 中遇到了 @Transaction 的问题。基本上,不会使用以下消息创建事务:
由于没有正在进行的交易而延迟身份插入
我在 Spring AOP 论坛中对问题进行了完整描述
http://forum.springsource.org/showthread.php?132612-Transaction-management
任何建议将不胜感激!
斯特凡诺
我在 Spring 中遇到了 @Transaction 的问题。基本上,不会使用以下消息创建事务:
由于没有正在进行的交易而延迟身份插入
我在 Spring AOP 论坛中对问题进行了完整描述
http://forum.springsource.org/showthread.php?132612-Transaction-management
任何建议将不胜感激!
斯特凡诺
找到了解决方案。
问题出在配置中。我添加了两个元素context:spring-configured
,context:load-time-weaver
这意味着两个不同的东西。第一个激活 AspectJ编译时编织(我不明白),第二个激活 AspectJ加载时间编织。我认为这两个元素不能很好地协同工作。
我决定使用编译时编织器,并且(经过一番挣扎......)我发现(显然)外部 jar 没有用这种配置编织,仅仅是因为它们尚未构建。
最简单的解决方法是修改节点aspectj-maven-plugin
下(在POM.xml中)添加的配置configuration
:
<weaveDependencies>
<weaveDependency>
<groupId>GROUP-ID</groupId>
<artifactId>ARTIFACT-ID</artifactId>
</weaveDependency>
</weaveDependencies>
对于您需要编织的每个工件。
现在交易工作正常!
@Ralph:非常感谢您抽出宝贵时间!
问候,
斯特凡诺
在您的代码中,您已经定义了这样的服务:
@Service
@Configurable
public class ServiceImpl<T> implements Service<T> {
@Override
@Transactional
public T save(T entity) {
....
}
}
我不知道你为什么使用@Configurable
注释。如果您不需要它们(也就是说,如果您不通过 new 创建此服务的实例),我会删除它们。
原因是我记得spring文档说@Configurable
启用注入,但它没有说任何关于启用的加载时间编织支持@Configurable