2016-08-19 2 views
1

첫 번째 Spring Data Neo4j 앱을 모델링하고 @RelationshipEntity 클래스의 서브 클래 싱에 대해 궁금해하십니까? 1) 완료 할 수 있습니까? 2) 좋은 생각입니까?스프링 데이터 Neo4j @RelationshipEntity 하위 클래스?

다음은 RSS 사용에 대한 예입니다. Feed

많은 Entry의를 가지고 있으며, 항목의 3 종류가 있습니다 :

  1. 원래 항목 (새로운 콘텐츠)
  2. Reblogged 내용
  3. 좋아 하냐 컨텐츠 (효과적으로 퇴화 Reblog)

피드는 다음과 같이 보일 수 있습니다. @Relationship List<Entry> entries; 여기에서 Liked는 Entry의 서브 클래스 인 Reblog의 클래스.

이 더 자연 주어진 RelationshipEntities 먼저 클래스 개체 보인다 @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 { ... 내가 말했듯이,이 이러한 아이디어 중 하나가 좋은 경우 처음 Neo4j 애플 리케이션 그래서 난 몰라.

쿼리의 관점에서 나는 EntryEntry의 특정 유형 (또는 유형 조합)에 대해 질문하고 싶습니다.

디자인/모델링 아이디어에 대한 의견을 환영합니다.

답변

2

그것은 다음의주의와 서브 클래스 관계 엔티티에있다 :

  • 각 서브 분류 관계 엔티티가 상기베이스 클래스로부터 차별화 추가적인 구별 속성을 선언한다 -이 정보가 사용되어 타입 인트로 스펙 션을위한 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 } 
        } 
    } 
    
    여기

    이 예는베이스 관계 엔티티합니다 (코 틀린 JVM 언어)이다 : 실시 예

용도 :

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를 통해 지원을 제공합니다은 - 매우 권장 접합.

관련 문제