2

ユーザーとアカウントのような 2 つのエンティティがあります。20 の関係のいずれかを持つアカウント ノードに関連するユーザー ノード。添付のサンプル画像デザインをご覧ください

ノードレイアウト画像

20 の関係のいずれかを使用して、対応するユーザーのアカウントを検索する必要があります。ユーザーの詳細とアカウントを取得するためにサイファークエリを使用しました.2つのエンティティ間の関係は、20の関係のいずれかになります。そのため、 @RelationshipEntity 型の値に注釈を付けることができません。たとえば User.java のコードを見つけてください

public class User
{ 
    private Long id;    
    String fulltextsearch;   

    String user_id; 

    String status; 

     @Relationship(type = "perm")
     List<Acronym> acronym;
     .....
         ...    
}

頭字語.java

@JsonIdentityInfo(generator=JSOGGenerator.class)
@RelationshipEntity
public class Acronym {
@GraphId
    Long id;
    String acronym;
    @StartNode
    private User user;
    @EndNode
    private Account account;
....
....
}

ユーザーリポジトリ.java

@RepositoryRestResource(collectionResourceRel = "User", path = "User")
public interface Userrepository extends GraphRepository<User> { 
    User findByLogin(@Param("login") String login);

    @Query("MATCH p=(user:User)-[r*0..1]->(account) WHERE user.login =~('(?i).*'+{Login}+'.*') RETURN p")
    Collection<User> findByloginContaining(@Param("login") String login);
}

関係ごとにオブジェクトを作成しようとしました(つまり、20の関係オブジェクト)。値を取得する正しい方法かどうかはわかりません。アカウントに対する関係を取得する方法を教えてください。常に null として取得されます。

前もって感謝します。

4

1 に答える 1

1

OGM/SDN 4 は、不明な関係タイプをサポートしていません。関係のタイプは@RelationshipEntity で指定する必要があります。

これを行う1つの方法は、あなたが言ったように、タイプごとに @RelationshipEntity を作成することですが、これは、関係タイプが異なるため(開始/終了ノードは同じですが)、 User クラスでそのような関係を20個指定する必要があることも意味します) . これは理想的ではなく、管理が難しい場合があります。

アプリケーションが主に動的リレーションシップ タイプで動作する場合、OGM は適していない可能性があります。

注: カスタム クエリ結果のエンティティへのマッピングは、OGM 2.x / SDN 4.1 でのみサポートされています。パスを返すことはできません。ノードや rel などのパスを構成するエンティティだけです。

于 2016-03-04T05:56:40.370 に答える