使用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);
}
知道如何在当前情况下正确查询节点标签吗?
答案 0 :(得分:0)
作为暂时的解决方法,您可以在子存储库中重新定义该方法(这可能会违背BaseGraphRepository的目的,但正如我所说,它只是该错误的解决方法):
public interface InstrumentRepository extends BaseGraphRepository<Instrument> {
Intrument findOneById(String id);
}