SND - 实体创建

 

实体主要有两个,一个是【节点实体】 一个是【关系实体】
 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 生成 

 

文档:

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. 关系实体, 主要用于复杂的关系映射

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;
    }
}

 

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

 

文档:

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值