当前位置:   article > 正文

SND - 实体创建

@nodeentity

 

实体主要有两个,一个是【节点实体】 一个是【关系实体】
 1.@NodeEntity
2.@RelationshipEntity

1.节点实体

  1. package org.canaan.neo4j.graph.entity;
  2. import lombok.Data;
  3. import org.canaan.neo4j.graph.convert.MoneyConverter;
  4. import org.neo4j.ogm.annotation.Id;
  5. import org.neo4j.ogm.annotation.Labels;
  6. import org.neo4j.ogm.annotation.NodeEntity;
  7. import org.neo4j.ogm.annotation.Relationship;
  8. import org.neo4j.ogm.annotation.typeconversion.Convert;
  9. import org.neo4j.ogm.annotation.typeconversion.DateLong;
  10. import java.util.Date;
  11. import java.util.Set;
  12. /**
  13. * {@link @NodeEntity} label 不指定默认为 类名即: UserNode
  14. *
  15. * @author Canaan
  16. * @date 2019/7/11 8:52
  17. */
  18. @Data
  19. @NodeEntity(label = "User")
  20. public class UserNode {
  21. public final static String LABEL_FOUNDER = "Founder";
  22. public final static String LABEL_PLOUGH = "Plough";
  23. public final static String LABEL_SONUZ = "Sonuz";
  24. /**
  25. * {@link @Id} 业务主键,唯一 可以使用 {@link @GeneratedValue} 生成
  26. *
  27. * @author Canaan
  28. * @date 2019/7/11 12:47
  29. */
  30. @Id
  31. private Long userId;
  32. //@Required 需要企业级neo4j
  33. private String userName;
  34. @DateLong //将日期类型转换为时间戳,或者用 @DateString 转换为String
  35. private Date createTime;
  36. @Convert(MoneyConverter.class)
  37. private Long fundValue;
  38. /**
  39. * 在 @NodeEntity label 后追加 额外的标签
  40. *
  41. * @author Canaan
  42. * @date 2019/7/11 11:56
  43. */
  44. @Labels
  45. private Set<String> labels;
  46. /**
  47. * 关系的指定默认是 【-->】
  48. *
  49. * @author Canaan
  50. * @date 2019/7/11 14:31
  51. */
  52. @Relationship(type = "SUPERIOR")
  53. private UserNode parentNode;
  54. //@PostLoad
  55. //public void loadData() {
  56. //当数据加载完成后,将调用该方法
  57. // System.out.println("数据加载了");
  58. //}
  59. }

自定义类型转换器: 

  1. package org.canaan.neo4j.graph.convert;
  2. import org.neo4j.ogm.typeconversion.AttributeConverter;
  3. /**
  4. * @author Canaan
  5. * @date 2019/7/11 19:06
  6. */
  7. public class MoneyConverter implements AttributeConverter<String, Integer> {
  8. @Override
  9. public Integer toGraphProperty(String value) {
  10. return Integer.valueOf(value);
  11. }
  12. @Override
  13. public String toEntityAttribute(Integer value) {
  14. return value.toString();
  15. }
  16. }

实体的主要注解在:   org.neo4j.ogm.annotation 包下
字段类型转换器注解在:  org.neo4j.ogm.annotation.typeconversion 包下

注意:

1. 如果字段名为 【id】 面没有注解说明,那么默认返回的是 GraphId
2. NodeEntity type 的默认值为 类名 。
3.@Id 是业务上的,不是由neo4j 生成 

 

文档:

https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:node-entity

实体Id 说明:
https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:graph-id

 

 2. 关系实体, 主要用于复杂的关系映射

  1. package org.canaan.neo4j.graph.entity;
  2. import lombok.Data;
  3. import org.neo4j.ogm.annotation.*;
  4. /**
  5. * 用户隶属关系
  6. *
  7. * @author Canaan
  8. * @date 2019/7/11 10:10
  9. */
  10. @Data
  11. @RelationshipEntity(type = Membership.TYPE)
  12. public class Membership {
  13. public final static String TYPE = "MEMBERSHIP";
  14. @Id
  15. @GeneratedValue
  16. private Long relationshipId;
  17. @StartNode
  18. private UserNode startNode;
  19. @EndNode
  20. private UserNode endNode;
  21. public Membership() {
  22. }
  23. public Membership(UserNode startNode, UserNode endNode) {
  24. this.startNode = startNode;
  25. this.endNode = endNode;
  26. }
  27. }

 

注意如果关系映射不正确,是无法级联查询其关系节点的

 

文档:

https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:relationship-entity

 

 

 

转载于:https://my.oschina.net/u/2552286/blog/3073017

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/727773
推荐阅读
相关标签
  

闽ICP备14008679号