gpt4 book ai didi

java - Spring Neo4j 事务回滚不起作用

转载 作者:行者123 更新时间:2023-11-30 10:12:34 27 4
gpt4 key购买 nike

我正在使用 spring neo4j(版本 3.3.4)并尝试使用 spring neo4j 事务。我将其配置为 Spring neo4j configurations .一切正常,但回滚无法正常工作。

例如,我尝试在一笔交易中添加一个新节点和一个现有节点。它引发了 RuntimeException 并且应该回滚。但是第一个节点是在没有回滚数据库的情况下创建的。日志显示回滚已经发生。有没有人有同样的问题或知道如何解决?提前致谢。

日志如下:

[2018-08-14 17:48:20.845][http-nio-8888-exec-4] DEBUG o.s.d.n.t.Neo4jTransactionManager - Rolling back Neo4j transaction [org.neo4j.ogm.drivers.bolt.transaction.BoltTransaction@421cb02f] on Session [org.neo4j.ogm.session.Neo4jSession@2f8c5762]
[2018-08-14 17:48:20.845][http-nio-8888-exec-4] DEBUG o.n.o.d.b.t.BoltTransaction - Rolling back native transaction: org.neo4j.driver.internal.ExplicitTransaction@5e10b6b3
[2018-08-14 17:48:20.846][http-nio-8888-exec-4] DEBUG o.neo4j.ogm.transaction.Transaction - Thread 54: Rollback transaction extent: 0
[2018-08-14 17:48:20.846][http-nio-8888-exec-4] DEBUG o.neo4j.ogm.transaction.Transaction - Thread 54: Rolled back
[2018-08-14 17:48:20.846][http-nio-8888-exec-4] DEBUG o.neo4j.ogm.transaction.Transaction - Thread 54: Close transaction extent: 0
[2018-08-14 17:48:20.846][http-nio-8888-exec-4] DEBUG o.neo4j.ogm.transaction.Transaction - Thread 54: Closing transaction
[2018-08-14 17:48:20.846][http-nio-8888-exec-4] DEBUG o.s.d.n.t.Neo4jTransactionManager - Closing Neo4j Session [org.neo4j.ogm.session.Neo4jSession@2f8c5762] after transaction
[2018-08-14 17:48:20.846][http-nio-8888-exec-4] DEBUG o.s.d.n.t.Neo4jTransactionManager - Resuming suspended transaction after completion of inner transaction
[2018-08-14 17:48:20.848][http-nio-8888-exec-4] ERROR c.s.k.c.s.i.GraphOperationServiceImpl - Error in committing directives: Node(19354) already exists with label `Product` and property `prodName` = 'test1'
org.neo4j.driver.v1.exceptions.ClientException: Node(19354) already exists with label `Product` and property `prodName` = 'test1'
[2018-08-14 17:48:20.849][http-nio-8888-exec-4] DEBUG o.s.j.d.DataSourceTransactionManager - Initiating transaction rollback
[2018-08-14 17:48:20.849][http-nio-8888-exec-4] DEBUG o.s.j.d.DataSourceTransactionManager - Rolling back JDBC transaction on Connection [HikariProxyConnection@1121924585 wrapping com.mysql.jdbc.JDBC4Connection@41813449]
[2018-08-14 17:48:20.850][http-nio-8888-exec-4] DEBUG o.s.j.d.DataSourceTransactionManager - Releasing JDBC Connection [HikariProxyConnection@1121924585 wrapping com.mysql.jdbc.JDBC4Connection@41813449] after transaction
[2018-08-14 17:48:20.850][http-nio-8888-exec-4] DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource

最佳答案

解决了。我发布这个答案以防其他人遇到同样的问题。

问题是回滚 JDBC 事务是在 mysql jdbc 连接上而不是使用 neo4j 事务管理器,这由以下日志指示。它仅在无错误回滚 neo4j 事务期间发生。

[2018-08-14 17:48:20.849][http-nio-8888-exec-4] DEBUG o.s.j.d.DataSourceTransactionManager - Rolling back JDBC transaction on Connection [HikariProxyConnection@1121924585 wrapping com.mysql.jdbc.JDBC4Connection@41813449]

解决方案是为 neo4jTransactionManager 指定一个 bean 名称,而不是默认名称“transactionManager”,这样就不会与默认的 mysql 事务管理器混淆。然后在事务注释器中指定事务管理器,例如@transactional("neo4jTransactionManager").

关于java - Spring Neo4j 事务回滚不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51839095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com