实体主要有两个,一个是【节点实体】 一个是【关系实体】
1.@NodeEntity
2.@RelationshipEntity
1.节点实体
- package org.canaan.neo4j.graph.entity;
-
- import lombok.Data;
- import org.canaan.neo4j.graph.convert.MoneyConverter;
- import org.neo4j.ogm.annotation.Id;
- import org.neo4j.ogm.annotation.Labels;
- import org.neo4j.ogm.annotation.NodeEntity;
- import org.neo4j.ogm.annotation.Relationship;
- import org.neo4j.ogm.annotation.typeconversion.Convert;
- import org.neo4j.ogm.annotation.typeconversion.DateLong;
-
- import java.util.Date;
- import java.util.Set;
-
- /**
- * {@link @NodeEntity} label 不指定默认为 类名即: UserNode
- *
- * @author Canaan
- * @date 2019/7/11 8:52
- */
- @Data
- @NodeEntity(label = "User")
- public class UserNode {
-
- public final static String LABEL_FOUNDER = "Founder";
- public final static String LABEL_PLOUGH = "Plough";
- public final static String LABEL_SONUZ = "Sonuz";
-
- /**
- * {@link @Id} 业务主键,唯一 可以使用 {@link @GeneratedValue} 生成
- *
- * @author Canaan
- * @date 2019/7/11 12:47
- */
- @Id
- private Long userId;
-
-
- //@Required 需要企业级neo4j
- private String userName;
-
-
- @DateLong //将日期类型转换为时间戳,或者用 @DateString 转换为String
- private Date createTime;
-
- @Convert(MoneyConverter.class)
- private Long fundValue;
-
- /**
- * 在 @NodeEntity label 后追加 额外的标签
- *
- * @author Canaan
- * @date 2019/7/11 11:56
- */
- @Labels
- private Set<String> labels;
-
- /**
- * 关系的指定默认是 【-->】
- *
- * @author Canaan
- * @date 2019/7/11 14:31
- */
- @Relationship(type = "SUPERIOR")
- private UserNode parentNode;
-
-
- //@PostLoad
- //public void loadData() {
- //当数据加载完成后,将调用该方法
- // System.out.println("数据加载了");
- //}
-
-
- }
自定义类型转换器:
- package org.canaan.neo4j.graph.convert;
-
- import org.neo4j.ogm.typeconversion.AttributeConverter;
-
- /**
- * @author Canaan
- * @date 2019/7/11 19:06
- */
- public class MoneyConverter implements AttributeConverter<String, Integer> {
-
- @Override
- public Integer toGraphProperty(String value) {
- return Integer.valueOf(value);
- }
-
- @Override
- public String toEntityAttribute(Integer value) {
- return value.toString();
- }
-
-
- }
实体的主要注解在: org.neo4j.ogm.annotation 包下
字段类型转换器注解在: org.neo4j.ogm.annotation.typeconversion 包下
注意:
1. 如果字段名为 【id】 面没有注解说明,那么默认返回的是 GraphId
2. NodeEntity type 的默认值为 类名 。
3.@Id 是业务上的,不是由neo4j 生成
文档:
2. 关系实体, 主要用于复杂的关系映射
- package org.canaan.neo4j.graph.entity;
-
- import lombok.Data;
- import org.neo4j.ogm.annotation.*;
-
- /**
- * 用户隶属关系
- *
- * @author Canaan
- * @date 2019/7/11 10:10
- */
- @Data
- @RelationshipEntity(type = Membership.TYPE)
- public class Membership {
-
- public final static String TYPE = "MEMBERSHIP";
-
- @Id
- @GeneratedValue
- private Long relationshipId;
-
- @StartNode
- private UserNode startNode;
-
- @EndNode
- private UserNode endNode;
-
- public Membership() {
- }
-
- public Membership(UserNode startNode, UserNode endNode) {
- this.startNode = startNode;
- this.endNode = endNode;
- }
- }
注意如果关系映射不正确,是无法级联查询其关系节点的
文档: