2016-08-19 13 views
1

私は最初のSpring Data Neo4jアプリケーションをモデリングしており、@ RelationhipEntityクラスのサブクラス化について疑問を抱いています.1)それを行うことができますか?2)良いアイデアですか?SpringデータNeo4j @RelationshipEntityサブクラス?

ここでは、私がRSSを使用することを考えている例を挙げます。 Feed

多くEntry Sを有し、エントリの3種類があります

  1. オリジナルエントリ(新コンテンツ)
  2. リブログコンテンツ
  3. 気に入ったコンテンツ(有効縮重リブログ)

フィードは次のようになります。 @Relationship List<Entry> entries; ここで、LikedはサブEntryのサブクラスであるReblogのクラス。私は、これは、これらのアイデアのいずれかが何か良いしている場合ので、私は知らない私の最初のNeo4jアプリで、言ったように @Relationship(type="Content", Relationship.OUTGOING) List<Entry> entries; ... @RelationshipEntity(type="Content") public class Content { ... @RelationshipEntity(type="RebloggedContent") public class RebloggedContent extends Content { ... @RelationshipEntity(type="LikedContent") public class LikedContent extends Content { ...

これは、より自然与えRelationshipEntitiesは、ファーストクラスのオブジェクトであるようです。

クエリの観点からは、EntryEntryの両方の特定のタイプ(またはタイプの組み合わせ)の両方について質問する必要があります。

デザイン/モデリングのアイデアへの参考になります。

答えて

2

それは以下の警告とサブクラス関係エンティティに可能である:

  • 各サブ分類関係エンティティは基本クラスから離れてそれを設定し、追加の特徴的なプロパティを宣言しなければならない - この情報はで使用されタイプイントロスペクション用のOGMツール。

例:

ここ基地関係エンティティの(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 } 
    } 
} 

使用法:

0123私たちはそれぞれ独立した関係タイプのためのコレクションを定義
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> 
} 

注意。集約された単一のコレクションが必要な場合は、これをコードで行う必要があります。

のNeo4jのユーザースラックチャンネル:StackOverflowのに加えて

を、のNeo4jコミュニティはNeo4j Users public Slack channelを経由してサポートを提供します - 加入を強く奨励されます。

関連する問題