java - 是否可以使用 Java API 确定 `Node` 是否在 Neo4J 的事务中?

标签 java database neo4j graph-databases neo4j-java-api

是否可以确定节点是否在交易中?可以通过 Node.getGraphDatabase 方法获取 GraphDatabaseService

我想做这样的事情:

public class Neo4JHelper {
    public void setProperty(Node node, String key, Object value) {
        if(isInTransaction(node) {
            node.setProperty(key, value);
        } else {
            throw new MyOwnException("You are trying to set a node outside a transaction... you suck");
        }
    }

    private boolean isInTransaction(Node node) {
        //Something
    }
}

我想这样做的原因是因为我想在尝试在事务外使用我的类 Neo4JHelper 时给我的用户一个自定义错误。

另一种解决方案是,如果有可能以某种方式告诉编译器您需要一个事务来使用该方法/类,否则会给出编译错误。

最佳答案

我对此有几种不同的看法,我不确定哪一种最有帮助。

第 1 点是您不需要进行此检查。如果您尝试创建任何虚拟节点,而您不在事务中,数据库将抛出一个异常,表明您不在事务中。因此,如果您想检测这种情况,只需尝试创建一个简单的测试节点即可。没有异常(exception)?您正在进行交易。

第 2 点可能是您在询问某个特定节点是否在交易中。我不知道有什么方法可以做到这一点,也许开发人员可以添加一些东西。在事务中,可以在单个节点上获取读/写锁。因此,如果您有 Transaction 对象(您的方法没有),那么代理方法可能是确定给定节点上是否有锁。

第 3 点虽然我不是 100% 确定你在做什么,但你的代码表明有不同的方法来解决这个问题,所以你甚至不必回答这个问题。如果您希望您的用户收到自定义错误,请继续并尝试修改该属性——如果 neo4j 抛出您不在事务中的异常,同样,这就是您的答案。捕获该异常,然后抛出您的自定义错误。

关于java - 是否可以使用 Java API 确定 `Node` 是否在 Neo4J 的事务中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33566884/

相关文章:

java - 如何使用 Servlet 和 MySQL 正确读取 Java 中的重音字符?

java - 为什么在尝试对 ResultSet 中检索到的列的值求和时出现错误?

google-chrome - Neo4j 浏览器无法在 Google Chrome 中运行

c# - neo4j 任务已被取消

java - 一起使用 Neo4j Core Java API 和终端控制台

java fx打印简单表单文档

java - 在java中更新SQL镜像

java - 为什么视口(viewport)更改监听器被多次调用

php - 使用第一个脚本中的 "more info"按钮将数据拉入第二个脚本

python - Django:保存旧的查询集以供将来比较