Spring Data Neo4j 创建重复节点
Spring Data Neo4j creates duplicate nodes
我正在使用 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 注释。如果我在同一注释中使用 unique
和 indexName
,则仅应用 indexName
而不是约束。现在,如果我使用 indexName
或 unique
SDN 可以创建其中一个,我必须通过 Neo4j webconsole 创建另一个,这有点烦人。我知道在 SDN 4.x.x 中索引维护不会成为代码的一部分,应该在外部处理。这是我们现在需要做的事情吗,因为 SDN 3.3.x 没有正确处理它?
indexName
和indexType
仅用于定义legacy indexes (which are now deprecated), and unique
is only used to define the uniqueness constraint for schema indexes。这两种索引类型是互斥的。
如果要施加唯一性约束,只需使用 unique
。
我正在使用 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 注释。如果我在同一注释中使用 unique
和 indexName
,则仅应用 indexName
而不是约束。现在,如果我使用 indexName
或 unique
SDN 可以创建其中一个,我必须通过 Neo4j webconsole 创建另一个,这有点烦人。我知道在 SDN 4.x.x 中索引维护不会成为代码的一部分,应该在外部处理。这是我们现在需要做的事情吗,因为 SDN 3.3.x 没有正确处理它?
indexName
和indexType
仅用于定义legacy indexes (which are now deprecated), and unique
is only used to define the uniqueness constraint for schema indexes。这两种索引类型是互斥的。
如果要施加唯一性约束,只需使用 unique
。