我正在尝试为 neo4j 实现一个插件,以使用 GraphAware 库添加一个自动增量 ID。为此,我编写了以下类:
public class ModuleBootstrapper implements RuntimeModuleBootstrapper
{
public RuntimeModule bootstrapModule(String moduleId, Map<String, String> config, GraphDatabaseService database)
{
return new MyModule(moduleId, config, database);
}
}
和:
public class MyModule extends BaseTxDrivenModule<Void>
{
int counter = 0;
public Void beforeCommit(ImprovedTransactionData transactionData)
throws DeliberateTransactionRollbackException
{
if (transactionData.mutationsOccurred()) {
for (Node newNode : transactionData.getAllCreatedNodes()) {
newNode.setProperty("id", counter++);
}
}
}
}
对于测试,我可以执行:
CREATE (n);
接着:
MATCH (n) RETURN n;
我可以看到我的插件的效果是id
添加到节点的一些属性。但是当我运行时:
CREATE (n) RETURN n;
返回的节点没有提到的id
属性,但同样,当我在单独的查询中匹配节点时,我发现一切都很好。只是在CREATE
查询中,返回的节点信息是我的插件修改它们之前的信息。
问题是;这是为什么?我不是在事务中通过我的插件修改了节点吗?返回的节点不应该显示我对它们所做的修改吗?有什么办法可以做到这一点?