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

### 配置和使用 ALSA Machine DAI #### 了解Machine DAI的概念 ASoC (ALSA System on Chip) 是为了更好地支持嵌入式系统和应用于移动设备的音频 codec 而设计的一套软件体系。其核心组成部分之一就是Machine,负责连接Platform和Codec,并定义了具体硬件平台上的DAI(Digital Audio Interface)链接方式[^1]。 #### 定义DAI链路 在实际应用中,`dai-link`属性被用来描述CPU端口(CPU_DAI),编解码器端口(CODEC_DAI),以及它们之间的通信协议等信息。这些设置通常会在特定板级支持包中的`.c`文件里完成,比如`mt76xx_machine.c`文件就包含了关于机器及其DAI链的具体实现细节[^4]。 对于配置Machine DAI来说,主要涉及以下几个方面: - **指定Master/Slave角色**: 可通过DTB(Device Tree Blob)节点来设定哪个组件作为位时钟(bitclock)和帧同步(frame-sync)信号的主人(master)[^3]。 ```device-tree simple-audio-card,bitclock-master = <&master>; simple-audio-card,frame-master = <&master>; ``` - **创建并注册DAI链表项**: 这部分工作一般是在内核模块初始化过程中完成,在对应的machine驱动程序中编写相应的结构体实例化语句,并将其加入到系统的全局列表中去[^2]。 ```c static struct snd_soc_dai_link dai_links[] = { { .name = "my-dai", .stream_name = "My Stream Name", .cpu_dai_name = "snd-soc-dummy-dai", /* CPU侧 */ .codec_dai_name = "wm8960-hifi", /* Codec侧 */ ... }, }; static struct snd_soc_card soc_card = { .name = "My Sound Card", .owner = THIS_MODULE, .dai_link = dai_links, .num_links = ARRAY_SIZE(dai_links), ... }; module_snd_soc_card(soc_card); ``` 以上代码片段展示了如何在一个Linux内核模块中声明一个名为`my-dai`的新DAI接口,并指定了它的流名称、所关联的CPU与Codec两侧的实际物理实体名称。最后将此新创建的对象添加到了整个声音子系统的管理之下。 #### 使用Machine DAI 一旦上述配置完成后,应用程序就可以像操作其他任何标准ALSA PCM设备一样访问该DAI资源了。用户空间可以通过命令行工具如`aplay`播放音频文件至指定的声音卡;也可以利用编程API开发更复杂的应用场景下的音视频处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值