我正在运行下面的代码来判断是否发生回滚调用.但是,我得到了这个错误:

Could not rollback transaction  org.neo4j.driver.exceptions.ClientException: Can't rollback, transaction has been rolled back
    at org.neo4j.driver.internal.util.Futures.blockingGet(Futures.java:143)
    at org.neo4j.driver.internal.InternalTransaction.rollback(InternalTransaction.java:46)

是否不能手动回滚事务?

Driver driver = GraphDatabase.driver(neo4jUrl, AuthTokens.basic(neo4jUsername,neo4jPassword));
Session session = driver.session();

Transaction tx = null;
try{
    tx = session.beginTransaction();

    String insertQuery = "CREATE(n:Person{id:8,name:'Person6',age:26}) ";
    tx.run(insertQuery);

    String delQuery = "MATCH(n:Person{id:3}) DELETE n";
   // String delQuery = "MATCH(n:Person{id:2}) DELETE n";
    tx.run(delQuery);

    tx.commit();
    System.out.println("Trnx committed");
}catch(Exception e){
    tx.rollback();
    System.out.println("Transaction rolled back.");
} finally {
    if (session != null) session.close();
    if (driver != null) driver.close();
}

推荐答案

你可以用tx.isOpen()来判断. 然而,一个更简单的解决方案是关闭事务,如果它没有提交,它将被回滚.

try (Transaction tx = session.beginTransaction()) {
    // try-with-resources automatically closes the transaction
    // [...]
}

附注:您不希望在每次运行事务时都创建驱动程序.

Java相关问答推荐

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

无法找到符号错误—Java—封装

在Spring Boot中使用哪个Java类来存储创建时间戳?

无法使用Java&;TestContainers获取AWS SQS队列的属性

Log4j与jdk21兼容吗?

如何将Java文档配置为在指定的项目根目录中生成?

根本不显示JavaFX阿拉伯字母

Spring Boot中的应用程序.properties文件中未使用的属性

IntelliJ IDEA中的JavaFX应用程序无法在资源中找到CSS文件

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

JOOQ:批处理CRUD操作使用动态表定义,如何?

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)

Java泛型方法重载

Java 21保护模式的穷尽性

如何显示新布局

将Optionals/null安全添加到嵌套的flatMap/流

java.util.LinkedList()是如何成为MutableList的实例的?

为什么child-pom会创建一个新版本

在不带instanceof或switch的java中记录模式

如何解释泛型类层次 struct 中子类的返回值类型和参数定义?