2017-12-12 12 views
0

これを正しく把握することができません。 、Spring Neo4Jクエリ抽象エンティティ属性

@NoRepositoryBean 
public interface BaseGraphRepository<T extends GraphEntity> extends GraphRepository<T> { 
    T findById(String id); 
    Collection<T> findByIdIn(Collection<String> ids); 
    T deleteById(String id); 
    Collection<T> deleteByIdIn(Collection<String> ids); 
} 

アイデアがGraphEntityをextentingている複数のエンティティを持つことです。

public abstract class GraphEntity extends AbstractEntity { 

    @GraphId 
    @Getter @Setter 
    @JsonIgnore 
    protected Long nodeId; 

    @Getter @Setter 
    @Index(unique = true, primary = true) 
    protected String id; 
} 

そして、このようなBaseGraphRepository

は、私はこのようなAbstractEntity/AbstractGraphEntityクラスが持っていますBaseGraphRepositoryを拡張するいくつかのリポジトリを使用します。

しかし、私がfindByIdで照会するたびに、それは私にnullを与え続けます。

GraphEntity@NodeEntityとして使用しようとしましたが、これはひどい考えです.1つの種類のエンティティのIDをクエリすると、カテゴリと呼ばれますが、ProductRepositoryでは、私はGraphEntityオブジェクトです。

どのように私はこれにアプローチする必要がありますか?

ありがとうございます!

答えて

0

私は、次のようなNeo4jRepositoryを使用してfindById/findByIdInを解決するために管理してきました:

public interface BaseGraphRepository<T extends GraphEntity> extends Neo4jRepository<T, String> {} 

しかし、たとえNeo4jRepositoryでGraphEntityでカスタムクエリの生成サイファーが誤って生成されます。

MATCH (n:GraphEntity) WHERE n.`id` ... 

これにはいくつかの回避策があるかもしれませんが、わかりません。

+0

クエリの生成が意図されています。これは、 ':GraphEntity'を使用しないと、' class GraphEntity'で宣言したインデックスを使用できなくなるからです。回避策として、findメソッドをオーバーライドして ':GraphEntity:T'とマッチさせることができますが、あまりエレガントではありません。 – Synch

関連する問題