我使用的是Spring Data Neo4j RX。我有一个这样的查询:
@Query("MATCH (a:Repo)-[:REPO_DEPEND_ON]->(b:Repo) WHERE a.name= $name RETURN a.name, b.name")
String[] getSingleRepoDependencyTo(String name);
我知道这里的返回类型是错误的,因为它不能是字符串数组。但是我怎样才能正确地得到包含两个字段的结果呢?
我在网上搜索了很长一段时间,但没有找到答案。此RX版本尚不支持"@QueryResult“注释。
谢谢你的帮助。
假设您有一个映射的
@Node
Repo
及其关系,如下所示
@Node
public class Repo {
// other things
String name;
@Relationship("REPO_DEPEND_ON") Repo repo;
}
在
...extends Neo4jRepository<Repo,...>
中定义此方法时,您可以使用
Projections
。
public interface RepoProjection {
String getName();
DependingRepo getRepo();
* nested projection
interface DependingRepo {
String getName();
}
重要的是要记住,返回值应该是节点和关系,才能以这种方式工作。
您还可以删除自定义查询,并执行以下操作:
RepoProjection findByName(String name)
如果您不需要在此存储库中为实体本身创建
findByName
。
看看这里: https://neo4j.github.io/sdn-rx/current/#projections.interfaces
它似乎列出了你想要的东西。从这些文档中:
interface NamesOnly {
String getFirstName();
String getLastName();
interface PersonRepository extends Neo4jRepository<Person, Long> {
List<NamesOnly> findByFirstName(String firstName);
}
还有一些其他的变体。
您可以在预期的模型上使用注释@QueryResult。例如,你可以这样做。
DTO:
import org.springframework.data.neo4j.annotation.QueryResult;
@QueryResult
public class SomeDto {
private int someInt;
private SomeObject sobj;
private double sdouble;
private AnotherObject anObj;