根据migration of SDN (Spring-data-neo4j) v3 to SDN4,索引不再存在,因此预计不再使用索引。
@NodeEntity
public class User extends Unversioned{
@Indexed(unique=true,failOnDuplicate = true) // <-- THIS
private String login;
...
}
根据here或there,似乎没有人感到惊讶。这不是在模型本身上定义约束的“要点”吗?
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的模型上定义约束似乎是一个不易出错的系统。 如果模型和模型,我们如何建立一个模型一致?约束是否解耦?我错过了什么?
答案 0 :(得分:2)
我会尽力给你一个答案&#34;来自战壕&#34;。我使用SDN 3.x相当多,现在我使用4.x,我也使用spring数据mongo,它有@Indexed
注释。
我同意,当您只想在属性上创建索引时非常方便。
但从长远来看,有几个问题。在部署和维护应用程序时,我不得不求助于在代码中管理索引,而不是声明性地。
这些包括
@Indexed
,会创建哪些索引?仅适用于基类标签? (或在mongo收集),所有孩子......?最后,您将一行@Indexed
注释换成另一行
@Autowired
private Neo4jOperations operations;
@PostConstruct
public void createIndexesAndConstraints() {
...
operations.query("CREATE INDEX ON :Person(email)", EMPTY_MAP);
...
}
答案 1 :(得分:1)
从SDN 4开始,索引管理被认为超出了映射框架的范围,建议在Spring之外进行管理。