如何解决ReactiveNeo4jClient 查询始终返回空结果
我正在尝试在 Spring Boot 反应式应用程序中执行自定义密码查询,但总是得到一个空输出。我尝试在 neo4j 浏览器中执行查询,并且能够获得预期的结果。我发现了类似的例子 here 但它是用 Neo4JClient 不是用 Neo4jReactiveClient
当我尝试在 MyDbClient -> getTeamWithPlayers 中调试代码时,指针没有进入 query.mappedBy 函数。
API
GetMapping("/teamAndPlayes/{teamId}")
public Mono<TeamWithPlayers> updateEventStatus(@RequestHeader("uid") String uid,@PathVariable Long teamId) {
return myDbClient.getTeamWithPlayers(teamId);
}
客户端实现
@Component
@RequiredArgsConstructor
public class MyDbClient {
private final ReactiveNeo4jClient client;
public Mono<TeamWithPlayers> getTeamWithPlayers(Long teamId) {
String query = "Match (team:Team) where id(team) =$teamId match (team)-[:REL{is:'TEAM'}]->(u:User) "
+ "optional Match (u) -[role:ROLE]->(team) "
+ "with team,COLLECT(u) as users,collect({uid: u.uid,role : role.is}) as roles "
+ "return team {id:id(team),.name,.description,.location,.emailAddress,.profileImgURL,.createdOn,users: users,roles: roles}";
return client.query(query).bind(teamId).to("teamId").fetchAs(TeamWithPlayers.class)
.mappedBy((TypeSystem ts,Record r) -> {
Value team = r.get("team");
List<User> users = team.get("users").asList(u -> User.builder()
.firstName(u.get("firstName").asString()).lastName(u.get("lastName").asString()).build());
List<PlayerRole> roles = team.get("roles").asList(pr -> PlayerRole.builder()
.uid(pr.get("uid").asString()).role(pr.get("role").asString()).build());
return TeamWithPlayers.builder().id(team.get("id").asLong()).name(team.get("name").asString())
.description(team.get("description").asString()).location(team.get("location").asString())
.emailAddress(team.get("emailAddress").asString())
.createdOn(team.get("createdOn").asLocalDateTime()).users(users).roles(roles).build();
}).one();
}
}
映射类
@Data
@Builder
@ToString
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TeamWithPlayers {
private Long id;
private String name;
private String description;
private String location;
private String emailAddress;
private String profileImgURL;
private LocalDateTime createdOn;
List<User> users;
List<PlayerRole> roles;
}
@Node
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User implements Entity {
@Id
@GeneratedValue
private Long id;
private String uid;
private String firstName;
private String lastName;
private String emailAddress;
private String profileImgURL;
private LocalDateTime updatedAt;
private LocalDateTime createdAt;
private LocalDateTime lastLoggedInAt;
}
@Data
@ToString
@Builder
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class PlayerRole {
String uid;
String role;
}
POM 依赖 2.4.2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
不确定我的方法有什么问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。