我使用的是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“注释。
谢谢你的帮助。
发布于 2020-07-17 05:19:09
假设您有一个映射的@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。
发布于 2020-09-05 08:05:31
看看这里: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);
}还有一些其他的变体。
发布于 2021-03-14 02:57:04
您可以在预期的模型上使用注释@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;
//getters setters
}Neo4jRepository:
public interface DomainObjectRepository extends Neo4jRepository<DomainObject, Long> {
@Query("MATCH(n:SomeTable) RETURN someInt, sobj, sdouble, anObj") //Return a few columns
Optional<SomeDto> getSomeDto();
}https://stackoverflow.com/questions/62925321
复制相似问题