当前位置: 首页 > 知识库问答 >
问题:

Spring Data Neo4j@RelationshipEntity子类?

田永春
2023-03-14

我正在为我的第一个Spring Data Neo4j应用程序建模,并想知道如何对@RelationshipEntity类进行子类化-1)可以做到吗,2)这是一个好主意吗?

这里有一个例子,说明了我对使用RSS的看法。

    null

这似乎更自然,因为RelationshipEntities是第一类对象:@relationship(type=“content”,relationship.outgoing)列表 条目;...@RelationshipEntity(type=“Content”)公共类内容{...@RelationshipEntity(type=“RebloggedContent”)公共类RebloggedContent扩展内容{...@RelationshipEntity(type=“LikedContent”)公共类LikedContent扩展内容{... 正如我所说,这是我的第一个Neo4j应用程序,所以我不知道这些想法是否好。

从查询的角度来看,我想问关于entryentry的特定类型(或类型组合)的问题。

对设计/建模思想的指针是赞赏的。

共有1个答案

步衡
2023-03-14

可以对关系实体进行子类划分,但要注意以下几点:

  • 每个子类关系实体必须声明一个附加的区分属性,以将其与基类区分开来-此信息由OGM工具用于类型内省。

示例:

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

除了StackOverflow之外,Neo4j社区还通过Neo4j用户公共Slack通道提供支持--非常鼓励加入。

 类似资料:
  • nosql数据库具有无模式属性,因此我们可以向节点或关系添加任何字段/属性。但是如果我使用Spring数据作为框架,我必须预先定义节点和关系对象的字段。Spring数据Neo4j似乎不支持动态插入字段...是真的吗?

  • 我在http://neo4j.com/docs/ogm/java/stable/遵循Neo4j OGM指南 对于关系实体,我们需要有一个开始节点和一个结束节点。我对这个例子做了一点修改(使它像这样更简单)- 现在,当我尝试保存这个在Neo4j,它工作正常。但是在我的场景中,StartNode和EndNode对象的类型是相同的- 当我尝试使用- 学生、课程和注册对象被保存,但两个MyObject和M

  • 我意识到这里问了一个类似的问题,但是我试图理解SDN创建一个匹配我的类名的标签以及创建一个以下划线为前缀的相同标签背后的原因。 例如,我有一个病人类。当我通过我的Neo4j存储库创建我的@NodeEntity修饰的患者类,然后通过Neo4j网络控制台查询它时,我看到患者和_Patient作为标签。 作为对这个问题的扩展,假设我有以下表示节点的类继承层次结构: 当我将患者实例保存到数据库中时,它将有

  • 我目前有一个代码片段,其中对于每个类别,它将找到子类别: 将递归获取一个类别的子级: 目前,使用,只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。 我如何显示子子类别给我们的子类别? 我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽

  • 我正试图通过WoodPress主题中的一个函数从woocommerce获取产品类别,我已经做到了: 这将按层次列出所有顶级类别及其下的子类别,但我有子类别(子类别)的子类别,因此如何列出这些子类别。

  • 所以我决定为我的Woocommerce商店提供两个不同的模板。 我发现了一个很好的小片段,它基本上告诉我编辑taxonomy-product_cat。php 我的所有店铺页面都是分类/归档页面。我父母的分类中,每只有50只猫。 因此,我的代码在taxonomy-product_cat中如下所示。php: 问题是archive-product.php只适用于“户外家具”类别,而不是其子类别。 我知道