实体主要有两个,一个是【节点实体】 一个是【关系实体】
1.@NodeEntity
2.@RelationshipEntityhtml
1.节点实体java
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("数据加载了"); //} }
自定义类型转换器: node
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 包下spring
注意:ide
1. 若是字段名为 【id】 面没有注解说明,那么默认返回的是 GraphId
2. NodeEntity type 的默认值为 类名 。
3.@Id 是业务上的,不是由neo4j 生成
ui
文档:this
实体Id 说明:
https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:graph-id.net
2. 关系实体, 主要用于复杂的关系映射code
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; } }
注意若是关系映射不正确,是没法级联查询其关系节点的
文档: