Spring数据Neo4j@RelationshipEntity子类?
我正在为我的第一个SpringDataNeo4J应用程序建模,我想知道如何将@RelationshipEntity类子类化——1)这可以做到吗,2)这是个好主意吗 下面是一个我想使用RSS的例子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是一流的对象,这似乎更为自然: @
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社区还通过网络提供支持,我们非常鼓励加入