java - 提交后如何从服务器插件中的 Neo4j 数据库获取属性?

标签 java plugins neo4j server graph-databases

我必须实现一个 Neo4j 服务器插件,该插件对数据库的更改使用react并获取有关这些更改的信息。我需要获取一个事务中所有已添加、更改和删除的数据。我使用在数据库中注册的 TransactionEventHandler。出于性能原因,我必须使用在对数据库进行更改后调用的 afterCommit 回调。这样交易就不会被插件阻止。

现在在这个回调中我做了一些类似的事情:

public void afterCommit(TransactionData data, Void arg1) {
    for(Node n:data.createdNodes()) {
        String firstkey = n.getPropertyKeys().iterator().next();
    }
}

但是 getPropertyKeys 抛出异常,因为事务已经提交。我不明白为什么这是个问题,我不想对事务进行任何更改,我只想要节点具有已更改的属性。有什么办法可以解决这个问题吗?异常的原因是什么?

异常:

java.lang.IllegalStateException: This transaction has already been completed.
    at org.neo4j.kernel.impl.api.KernelTransactionImplementation.assertTransactionOpen(KernelTransactionImplementation.java:376)
    at org.neo4j.kernel.impl.api.KernelTransactionImplementation.acquireStatement(KernelTransactionImplementation.java:261)
    at org.neo4j.kernel.impl.api.KernelTransactionImplementation.acquireStatement(KernelTransactionImplementation.java:80)
    at org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.instance(ThreadToStatementContextBridge.java:64)
    at org.neo4j.kernel.InternalAbstractGraphDatabase$8.statement(InternalAbstractGraphDatabase.java:785)
    at org.neo4j.kernel.impl.core.NodeProxy.getPropertyKeys(NodeProxy.java:358)
    at de.example.neo4jVersionControl.ChangeEventListener.afterCommit(ChangeEventListener.java:41)

最佳答案

afterCommit 中,事务已经提交(因此得名)。要从节点访问属性,您需要事务上下文 - 请记住,每个操作(甚至只读)都需要它。

TransactionEventHandler 的推荐实现方式是仅依赖于TransactionDataTransactionData.assignedNodeProperties() 也将返回新创建节点的属性。

关于java - 提交后如何从服务器插件中的 Neo4j 数据库获取属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288095/

相关文章:

java - 带有 Java 7 的 JTextPane 中带有样式文本的奇怪文本换行

java - 从堆创建 JTree

ios - 如何将本地框架添加到 iOS 的 Flutter 插件中

graph - Neo4j 和多个项目、嵌套关系

neo4j - 执行缓慢的密码查询创建节点以按属性值对现有节点进行分组

java - Apache Spark,创建配置单元上下文 - NoSuchMethodException

java - 试图从条形码设备获取数据

c++ - 将外部应用程序与我的应用程序集成

java - 在评估阶段使用 Gradle 插件配置属性

neo4j - Spring Data Neo4j 在访问已检索到的对象时引发 NotInTransactionException