原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程三(Spring中国教育管理中心)
6.2.处理和提供唯一 ID
6.2.1.使用内部 Neo4j id
为您的域类提供唯一标识符的最简单方法是在 类型字段上组合@Id和(最好是对象,而不是标量,因为字面量是一个更好的指示实例是否是新的):@
GeneratedValueLonglongnull
示例 5. 具有内部 Neo4j id 的可变 MovieEntity
@Node("Movie")
public class MovieEntity {
@Id @GeneratedValue
private Long id;
private String name;
public MovieEntity(String name) {
this.name = name;
}
}
你不需要为字段提供setter,SDN会使用反射来分配字段,但是如果有的话就使用setter。如果你想用内部生成的 id 创建一个不可变的实体,你必须提供一个wither。
示例 6. 具有内部 Neo4j id 的不可变 MovieEntity
@Node("Movie")
public class MovieEntity {
@Id @GeneratedValue
private final Long id;
private String name;
public MovieEntity(String name) {
this(null, name);
}
private MovieEntity(Long id, String name) {
this.id = id;
this.name = name;
}
public MovieEntity withId(Long id) {
if (this.id.equals(id)) {
return this;
} else {
return new MovieEntity(id, this.title);
}
}
}
指示生成值的不可变最终 id 字段
公共构造函数,由应用程序和 Spring Data 使用
内部使用的构造函数
这就是所谓的-属性凋零id。它创建一个新实体并相应地设置字段,而不修改原始实体,从而使其不可变。
你要么必须为 id 属性或类似的东西提供一个 setter ,如果你想拥有
- 优点:很明显 id 属性是代理业务键,使用它不需要进一步的努力或配置。
- 缺点:它与 Neo4js 内部数据库 id 相关联,这对于我们的应用程序实体来说并不是唯一的,仅在数据库生命周期内。
- 缺点:创建不可变实体需要花费更多精力
6.2.2.使用外部提供的代理键
@GeneratedValue注释可以将实现的类作为
org.springframework.data.