neo4j:无法在已执行架构更新的事务中执行数据更新

时间:2014-02-28 08:11:33

标签: neo4j spring-data-neo4j

您好我在使用Neo4jTemplate

保存NodeEntity对象时遇到以下错误

无法在已执行架构更新的事务中执行数据更新

Spring-data: -

        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j</artifactId>
        <version>3.1.0.BUILD-SNAPSHOT</version>

Neo4j版本:2.X

服务: -

@Override
@Transactional
public void addRepository(Repository repository) {
    template.save(repository);
}

引起:org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException:无法在已执行架构更新的事务中执行数据更新。     at org.neo4j.kernel.impl.api.KernelTransactionImplementation $ TransactionType $ 2.upgradeToDataTransaction(KernelTransactionImplementation.java:452)     at 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个

2 个答案:

答案 0 :(得分:1)

SDN 3.0.0现在需要在Spring配置中配置base-package 实际上,现在需要这样做,因为Neo4j 2.0.X不允许在与数据更新相同的事务中插入索引(第一次 save操作所涉及的模式更改){{{ 1}}你的实体在你的情况下)。

因此,如果您对Spring使用XML配置,它将如下所示:

save

其中<neo4j:config graphDatabaseService="graphDatabaseService" base-package="com.myApp.myDomainPackage" /> 包含所有节点实体。 而不是简单:

com.myApp.myDomainPackage

答案 1 :(得分:0)

数据更新和架构更改需要在单独的事务中进行。如果在同一交易中允许他们出现各种奇怪的现象。