【发布时间】:2015-11-07 05:38:35
【问题描述】:
我正在将 Spring Data Neo4j 3.3.1.RELEASE 与 Neo4j 服务器 2.2.3 一起使用。
我的问题是有些节点与我的实体重复,但其中只有索引属性。
我的班级看起来像这样
@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 注释。如果我在同一个注释中使用unique 和indexName,则只应用indexName 而不是约束。现在,如果我使用indexName 或unique SDN 可以创建其中一个,我必须通过Neo4j webconsole 创建另一个,这有点烦人。我知道在 SDN 4.x.x 中,索引维护不是代码的一部分,应该在外部处理。由于 SDN 3.3.x 不能正确处理,我们现在需要这样做吗?
【问题讨论】:
标签: neo4j spring-data spring-data-neo4j