【问题标题】:Unique index in Spring Neo4j not workingSpring Neo4j 中的唯一索引不起作用
【发布时间】:2013-12-30 18:59:16
【问题描述】:

我从标题中知道,这听起来像是 this question 的复制品,但我向你保证不是。事实上,@Indexed(unique=true) 工作正常,因为它的重复项被捕获了!但是,在创建第一个节点时,Spring 实际上以某种方式创建了两个节点。这是我正在做的事情:

@Autowired
private MyEntityRepository repo;

public void testCreate(){
    MyEntity me = new MyEntity();
    me.setName("somename");
    me.setDescription("blah blah");
    repo.save(me);
}

@NodeEntity
public class MyEntity{
    @GraphId
    private Long id;
    @Indexed(unique=true)
    private String name;
    private String description;
}

在空数据库上运行后,将抛出 DataIntegrityViolationException 并创建两个节点。具有最低 ID 的节点将具有名称和描述字段,但另一个节点将只有名称字段。奇怪的是,两个节点中的名称字段具有相同的值,因此即使抛出异常,它仍然试图创建节点。如果我去掉@Indexed 注释,一切正常,只创建一个节点(但显然没有重复预防)。

我使用的是独立的 Neo4j 服务器,因为该应用程序的其他几个部分需要能够访问它。但是,我注意到嵌入式 Neo4j 服务器不会发生这种行为。我真的希望 Spring over HTTP 支持这样一个有用的特性,但如果不支持,我也不会感到惊讶。有没有办法让这个工作?

【问题讨论】:

    标签: java spring neo4j spring-data-neo4j


    【解决方案1】:

    Spring Data Neo4j over HTTP 并没有真正使用事务。您使用什么 SDN 版本?

    我尝试使用 Neo4j 服务器的独特创建工具,并且通常可以。

    您能否分享您的完整堆栈跟踪,并检查服务器日志是否有任何问题。

    【讨论】:

    • 我现在使用的是 2.3.2.RELEASE。尽管 Neo4j 通过 HTTP 支持它,但我收集到尚不存在事务支持,因此希望 SDN 很快就会实现。我注意到 SDN 中的 HTTP 不支持很多东西,但这个很奇怪。
    • 在 Neo4j 2.0 中只有 http 上的事务,并且仅用于 cypher。因此,这只有在对 SDN 基础进行大规模重写之后才会出现。我仍然希望看到您的堆栈跟踪,也许还有一个能够重现该问题的独立测试项目。
    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2012-06-25
    • 2023-03-07
    • 1970-01-01
    • 2014-07-29
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多