在spring-data-neo4j中使用@Transactional发出问题

时间:2013-01-27 02:30:41

标签: java cxf spring-transactions spring-data-neo4j

我正在混合spring-data和CXF来创建一个创建neo4j节点的RESTful端点。我的结构是一个定义面向公众的方法的集合接口,我的公共方法调用我的实现,其中有几个私有方法。

我的私有方法对它们有spring-tx @Transactional,当我尝试从我的公共方法中调用它们时,我得到org.neo4j.graphdb.NotInTransactionException。下面是一个GitHub项目,它设置为显示我的配置,你也可以运行它来查看错误:

https://github.com/NicholasAStuart/broken-spring-neo4j-cxf.git

任何人都可以帮助我吗?我已经按照spring-data-neo4j的文档中的步骤进行了操作,但是我似乎无法使用它,任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

@Transactional注释不适用于私有方法。

来自Spring documentation

  

使用代理时,应该应用@Transactional注释   仅限具有公众可见度的方法。如果你做注释保护,   使用@Transactional注释的私有或包可见方法,   没有引发错误,但带注释的方法没有出现错误   配置的事务设置。考虑使用AspectJ(参见   如果你需要注释非公开方法。

您可以使用aspectj模式在任何类型的方法上启用此行为。

答案 1 :(得分:0)

chapter 11.5.6 of spring manual上的荧光笔:

  

方法可见性和@Transactional

     

使用代理时,应该应用@Transactional注释   仅限具有公众可见度的方法。如果你做注释保护,   使用@Transactional注释的私有或包可见方法,   没有引发错误,但带注释的方法没有出现错误   配置的事务设置。考虑使用AspectJ(参见   如果你需要注释非公开方法。