2

我正在混合 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 文档中的步骤进行操作,但我似乎无法使其正常工作,有人可以帮助我吗?

4

2 回答 2

3

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

来自Spring 文档

使用代理时,您应该仅将 @Transactional 注释应用于具有公共可见性的方法。如果您使用 @Transactional 注释对受保护的、私有的或包可见的方法进行注释,则不会引发错误,但带注释的方法不会显示配置的事务设置。如果您需要注释非公共方法,请考虑使用 AspectJ(见下文)。

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

于 2013-01-29T03:55:08.003 回答
0

作为spring 手册第 11.5.6 章的荧光笔:

方法可见性和@Transactional

使用代理时,您应该仅将 @Transactional 注释应用于具有公共可见性的方法。如果您使用 @Transactional 注释对受保护的、私有的或包可见的方法进行注释,则不会引发错误,但带注释的方法不会显示配置的事务设置。如果您需要注释非公共方法,请考虑使用 AspectJ(见下文)。

于 2013-01-29T03:57:25.110 回答