首页 文章

Spring Data Neo4j创建了重复的节点

提问于
浏览
3

我使用Spring Data Neo4j 3.3.1.RELEASE和Neo4j服务器2.2.3 .

我的问题是有些节点是我的实体的重复,但只有索引属性 .

我的 class 看起来像这样

@NodeEntity
@TypeAlias("Product")
public class Product {
    @GraphId
    private Long graphId;
    @Indexed(indexName="productId", unique=true, indexType=IndexType.SIMPLE)
    private String productId;
    private String productType;
    ...
}

创建新节点时,我首先检查是否存在新节点,如果存在则更新它,否则创建一个新节点 .

Product product = productRepository.findByProductId(productId);
if (product == null) {
    product = new Product(productId);
}
...
productRepository.save(product);

存储库界面 .

public interface ProductRepository extends GraphRepository<Product> {
    public Product findByProductId(String productId);
}

在Neo4j中,实体被创建到具有所有属性的节点 . 但是一些节点也有一个只包含productId的重复节点 . 事情是这不会发生在所有节点上 . 截至目前,我们有大约120,000个节点,多达30个节点具有此重复 . 每次我们重新摄取数据都有重复 . 现在我们只有2个重复的节点 .

还有一件事,在检查重复的节点时,似乎它们按顺序有一个节点ID,我认为它们是在我保存实体时一起创建的 .

编辑:经过调查,似乎唯一约束不适用于productId . 问题似乎来自@Indexed注释 . 如果我在同一个注释中使用了 uniqueindexName ,则只应用 indexName 而不是约束 . 现在,如果我使用 indexNameunique SDN可以创建其中一个,我必须通过Neo4j webconsole创建另一个,这有点烦人 . 我知道在SDN 4.x.x中,索引维护不是代码的一部分,应该在外部处理 . 这是我们现在需要做的事情,因为SDN 3.3.x无法正确处理它吗?

1 回答

  • 4

    indexNameindexType 仅用于定义legacy indexes(现已弃用), unique 仅用于定义schema indexes的唯一性约束 . 两种索引类型是互斥的 .

    如果要强加唯一性约束,则只需使用 unique .

相关问题