SDN基础存储库不查询正确的节点标签

时间:2017-03-01 20:54:24

标签: spring-data-neo4j spring-data-neo4j-4

使用SDN 4.2,我试图用其他存储库使用的泛型方法定义基本存储库。这样做时,似乎生成的查询将使用泛型类型作为节点标签,而不是使用标签的实际节点实体类名。

public interface BaseGraphRepository<T extends IdNode> extends GraphRepository<T> {
    T findOneById(@Param("id") String id);
}

现在让我们说我有

@Repository
public interface InstrumentRepository extends BaseGraphRepository<Instrument> {
}

查询InstrumentRepository时,生成的查询为

MATCH (n:`IdNode`) WHERE n.`id` = { `id_0` } WITH n MATCH p=(n)-[*0..1]-(m) RETURN p, ID(n)

我原本期望节点标签是&#34; Instrument&#34;而不是&#34; IdNode&#34;。

我自己试图使用一些SpEL来修复它,但似乎SDN不支持以下语法:

public interface BaseGraphRepository<T extends IdNode> extends GraphRepository<T> {
    @Query("MATCH (n:#{#entityName}) WHERE n.id = {id} RETURN n")
    T findOneById(@Param("id") String id);
}

知道如何在当前情况下正确查询节点标签吗?

1 个答案:

答案 0 :(得分:0)

作为暂时的解决方法,您可以在子存储库中重新定义该方法(这可能会违背BaseGraphRepository的目的,但正如我所说,它只是该错误的解决方法):

public interface InstrumentRepository extends BaseGraphRepository<Instrument> {
    Intrument findOneById(String id);
}