【问题标题】:Spring-data-neo4j v4, why no indexspring-data-neo4j v4,为什么没有索引
【发布时间】:2016-05-02 20:20:27
【问题描述】:

根据migration of SDN (Spring-data-neo4j) v3 to SDN4,索引不再存在,因此预计这将不再起作用。

@NodeEntity
public class User extends Unversioned{
    @Indexed(unique=true,failOnDuplicate = true) // <-- THIS
    private String login;
    ...
}

根据herethere,似乎没有人感到惊讶。这不是在模型本身上定义约束的“点”吗?

Sring-data主页定义的任务:

Spring Data 的使命是为数据访问提供熟悉且一致的基于 Spring 的编程模型,同时仍保留底层数据存储的特​​殊特性。

即使与the latest Spring-data-JPA official example 相比,模型上仍然定义了约束:

@Entity
public class Customer extends AbstractEntity {

    private String firstname, lastname;

    @Column(unique = true)
    private EmailAddress emailAddress;

在我看来,允许在非常基于 java 的模型上定义约束似乎是更不容易出错的系统。 如果模型和约束是解耦的,我们应该如何建立一个一致的模型?我错过了什么?

【问题讨论】:

    标签: spring-data spring-data-neo4j spring-data-neo4j-4


    【解决方案1】:

    我将尝试“从战壕中”给你一个答案。 SDN 3.x用的比较多,现在用4.x,也用spring data mongo,有@Indexed注解。

    我同意当您只想在属性上创建索引时非常方便。

    但从长远来看有几个问题。在部署和维护应用程序时,我不得不求助于在代码中管理索引,而不是以声明方式。

    这些包括

    • 重命名属性,不会删除旧索引
    • 更改索引(例如,使其成为唯一约束)
    • 这些注释通常不能提供本地数据库索引定义的所有可能性
    • 类层次结构 - 如果在基类的属性上有@Indexed 怎么办 - 创建什么索引?只是为了基类标签? (或 mongo 中的集合),所有孩子...?

    最后你用 @Indexed 注释换了另一行

    @Autowired
    private Neo4jOperations operations;
    
    @PostConstruct
    public void createIndexesAndConstraints() {
        ...
        operations.query("CREATE INDEX ON :Person(email)", EMPTY_MAP);
        ...
    }
    

    【讨论】:

      【解决方案2】:

      从 SDN 4 开始,索引管理被认为超出了映射框架的范围,建议在 Spring 之外对其进行管理。

      更多信息:http://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference_programming-model_indexing

      【讨论】:

      • 但我不明白为什么会有如此剧烈的设计变化。那么街头的人应该如何定义他的约束呢?基于 java 的定义似乎是最好的地方,没有重构问题,一个一致的 bean 定义(统治它们)
      • 您仍然可以通过 Neo4jTemplate 或 Session 执行 cypher 来定义它们。做出这个决定是因为索引管理不再被认为是映射框架的责任。
      • 就是这样,如果说变量名改变了,单独文件中的索引也需要改变。这是迄今为止已经完成的一切的回归......约束是如此重要,这是丢失数据的唯一屏障,尤其是。在以合并为主导的 neo4j 环境中。我不想升级到这样的解耦模型。感谢您的回答
      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 2013-12-10
      • 1970-01-01
      相关资源
      最近更新 更多