neo4j:无法在已执行模式更新的事务中执行数据更新 [英] neo4j : Cannot perform data updates in a transaction that has performed schema updates
问题描述
我在使用Neo4jTemplate保存NodeEntity对象时遇到以下错误
Hi I am getting following error while saving NodeEntity object by using Neo4jTemplate
无法在已执行架构更新的事务中执行数据更新
Cannot perform data updates in a transaction that has performed schema updates
Spring数据:-
Spring-data :-
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>3.1.0.BUILD-SNAPSHOT</version>
Neo4j版本:2.X
Neo4j Version : 2.X
服务:-
@Override
@Transactional
public void addRepository(Repository repository) {
template.save(repository);
}
由以下原因引起:org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException:无法在已执行模式更新的事务中执行数据更新. 在org.neo4j.kernel.impl.api.KernelTransactionImplementation $ TransactionType $ 2.upgradeToDataTransaction(KernelTransactionImplementation.java:452) 在org.neo4j.kernel.impl.api.KernelTransactionImplementation.upgradeToDataTransaction(KernelTransactionImplementation.java:212) 在org.neo4j.kernel.impl.api.KernelStatement.dataWriteOperations(KernelStatement.java:84) 在org.neo4j.kernel.InternalAbstractGraphDatabase.createNode(InternalAbstractGraphDatabase.java:1033) ...还有49个
Caused by: org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException: Cannot perform data updates in a transaction that has performed schema updates. at org.neo4j.kernel.impl.api.KernelTransactionImplementation$TransactionType$2.upgradeToDataTransaction(KernelTransactionImplementation.java:452) at org.neo4j.kernel.impl.api.KernelTransactionImplementation.upgradeToDataTransaction(KernelTransactionImplementation.java:212) at org.neo4j.kernel.impl.api.KernelStatement.dataWriteOperations(KernelStatement.java:84) at org.neo4j.kernel.InternalAbstractGraphDatabase.createNode(InternalAbstractGraphDatabase.java:1033) ... 49 more
推荐答案
SDN 3.0.0现在需要在您的Spring配置中配置base-package
.
实际上,由于Neo4j 2.0.X不允许在与数据更新(save
的save
)相同的事务中插入索引(您的 first save
操作涉及的模式更改),因此现在需要这样做.您的实体).
SDN 3.0.0 needs now to have base-package
configured in your Spring configuration.
Indeed, this is now needed since Neo4j 2.0.X doesn't allow insertion of index (schema change involved by your first save
operation) in the same transaction as a data update (save
of your entity in your case).
因此,如果您对Spring使用XML配置,它将看起来像:
So if you use XML configuration for Spring, it would looks like:
<neo4j:config graphDatabaseService="graphDatabaseService" base-package="com.myApp.myDomainPackage" />
其中,com.myApp.myDomainPackage
包含所有节点实体.
而不是简单:
where com.myApp.myDomainPackage
contains all the node entities.
instead of simple:
<neo4j:config graphDatabaseService="graphDatabaseService"/>
这篇关于neo4j:无法在已执行模式更新的事务中执行数据更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!