Spring数据Neo4j@RelationshipEntity子类?

Spring数据Neo4j@RelationshipEntity子类?,neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data Neo4j 4,Neo4j Ogm,我正在为我的第一个SpringDataNeo4J应用程序建模,我想知道如何将@RelationshipEntity类子类化——1)这可以做到吗,2)这是个好主意吗 下面是一个我想使用RSS的例子 Feed有许多条目s,有3种类型的条目: 原始条目(新内容) 重新记录的内容 喜欢的内容(实际上是退化的日志) 提要可以如下所示: @关系 列出条目; 其中like是Reblog的子类,Reblog是Entry的子类 考虑到RelationshipEntities是一流的对象,这似乎更为自然: @

我正在为我的第一个SpringDataNeo4J应用程序建模,我想知道如何将@RelationshipEntity类子类化——1)这可以做到吗,2)这是个好主意吗

下面是一个我想使用RSS的例子

Feed
有许多
条目
s,有3种类型的条目:

  • 原始条目(新内容)
  • 重新记录的内容
  • 喜欢的内容(实际上是退化的日志)
  • 提要可以如下所示:
    
    @关系
    列出条目;
    
    其中like是Reblog的子类,Reblog是Entry的子类

    考虑到RelationshipEntities是一流的对象,这似乎更为自然:
    
    @关系(type=“Content”,Relationship.OUTGOING)
    列出条目;
    ...
    @RelationshipEntity(type=“Content”)
    公开课内容{
    ...
    @RelationshipEntity(type=“RebloggedContent”)
    公共类RebloggedContent扩展内容{
    ...
    @RelationshipEntity(type=“LikedContent”)
    类似于公共类的内容扩展了内容{
    ...
    
    正如我所说,这是我的第一个Neo4j应用程序,所以我不知道这些想法是否有任何好处

    从查询的角度来看,我想询问有关
    条目
    条目
    的特定类型(或类型组合)的问题


    欢迎提供设计/建模想法的指针。

    可以使用以下警告对关系实体进行子类划分:

    • 每个子类关系实体必须声明一个额外的区别属性,将其与基类区分开来-OGM工具使用此信息进行类型内省
    示例:

    class CandidateProfile {
    
        @Relationship(type = "LIKES", direction = Relationship.OUTGOING)
        var likes: MutableSet<Like>
    
        @Relationship(type = "DISLIKES", direction = Relationship.OUTGOING)
        var dislikes: MutableSet<Dislike>
    
        @Relationship(type = "MAYBE_LATER", direction = Relationship.OUTGOING)
        var maybeLaters: MutableSet<MaybeLater>
    }
    
    下面是一个基本关系实体的示例(使用Kotlin JVM语言):

    abstract class Relationship
    {
        @GraphId
        internal var graphId: Long?
            private set
    
        @StartNode
        var auditioner: CandidateProfile
    
        @EndNode
        var auditionee: CandidateProfile
    
        var createdDate: Date
    
        init
        {
            this.graphId = null
            this.auditioner = CandidateProfile()
            this.auditionee = CandidateProfile()
            this.createdDate = Date()
        }
    
        abstract fun mutualRelationship(): Relationship?
    
    
    }
    
    连同一个子类:

    @RelationshipEntity(type = "MAYBE_LATER")
    class MaybeLater constructor(auditioner: CandidateProfile,
                                 auditionee: CandidateProfile,
                                 timeOut: Date?) : Relationship()
    {
        var timeOut: Date?
        var count: Int
    
        init
        {
            this.auditioner = auditioner
            this.auditionee = auditionee
            this.timeOut = timeOut
            this.count = 1
        }
    
        //Provide default constructor for OGM
        constructor() : this(CandidateProfile(), CandidateProfile(), null)
    
    
        override fun mutualRelationship(): MaybeLater?
        {
            return auditionee.maybeLaters.find { it.auditionee == auditioner }
        }
    }
    
    用法:

    class CandidateProfile {
    
        @Relationship(type = "LIKES", direction = Relationship.OUTGOING)
        var likes: MutableSet<Like>
    
        @Relationship(type = "DISLIKES", direction = Relationship.OUTGOING)
        var dislikes: MutableSet<Dislike>
    
        @Relationship(type = "MAYBE_LATER", direction = Relationship.OUTGOING)
        var maybeLaters: MutableSet<MaybeLater>
    }
    
    class CandidateProfile{
    @关系(type=“LIKES”,direction=Relationship.OUTGOING)
    变量:可变集
    @关系(type=“DISLIKES”,direction=Relationship.OUTGOING)
    var不喜欢:可变集
    @关系(type=“MAYBE\u LATER”,direction=Relationship.OUTGOING)
    var-maybeLaters:MutableSet
    }
    
    请注意,我们为每个单独的关系类型定义了一个集合。如果需要单个聚合集合,则需要在代码中完成

    Neo4j用户松弛通道:

    class CandidateProfile {
    
        @Relationship(type = "LIKES", direction = Relationship.OUTGOING)
        var likes: MutableSet<Like>
    
        @Relationship(type = "DISLIKES", direction = Relationship.OUTGOING)
        var dislikes: MutableSet<Dislike>
    
        @Relationship(type = "MAYBE_LATER", direction = Relationship.OUTGOING)
        var maybeLaters: MutableSet<MaybeLater>
    }
    
    除了StackOverflow,Neo4j社区还通过网络提供支持,我们非常鼓励加入