spring-boot - ArangoDb 的 Spring Data 集成在查询中返回空结果列表
问题描述
当我通过 ArangoDb 和 Spring Data 集成使用来自方法名称的查询时,我总是得到空列表。我使用的方式有什么问题?这是一个例子。
这些是实体:
授权:
@Document("authorizations")
@Data // (Lombok)
public class Authorization {
@Id
private String id;
private String caption;
@Relations(edges = com.picktur.server.relations.UserAuthorized.class, lazy = true)
private User user;
}
用户:
@Document("users")
@Data @NoArgsConstructor // (Lombok)
public class User {
@Id
private String id;
private String username;
@Relations(edges = com.picktur.server.relations.UserAuthorized.class, lazy = true)
private Collection<Authorization> authorizations;
}
授权库:
public interface AuthorizationRepo extends ArangoRepository<Authorization, String> {
Iterable<Authorization> findAllByUser(User user);
}
用户和授权之间的边缘:
@Edge
@Data
public class UserAuthorized {
@Id
private String id;
@From
private User user;
@To
private Authorization authorization;
public UserAuthorized( User user, Authorization authorization) {
this.authorizedPhoto = user;
this.authorization = authorization;
}
}
UserAuthorized Egde 的存储库:
public interface UserAuthorizedRepo extends ArangoRepository<UserAuthorized, String> {
}
数据持久性逻辑:
User user = get_user_from_security_context();
Authorization authorization = new Authorization();
authorization.setUser(user);
...
authorization = authorizationRepo.save(authorization);
UserAuthorized userAuthorized = new UserAuthorized(user, authorization);
userAuthorizedRepo.save(userAuthorized);
结果为空的查询:
Iterable<Authorization> authorizations = authorizationRepo.findAllByUser(user);
所有文档和边缘都存在于数据库中,但结果为空。
解决方案
查询派生在文档字段上生成 AQL 查询,例如。如果findAllByUser
它执行 AQL 查询,例如:
FOR a IN authorizations FILTER a.user == @user RETURN a
这显然返回一个空数组。
您可以在 logback.xml 中全局检查生成的启用调试日志级别的查询。
根据您的数据模型,要获取给定用户的所有授权,您应该执行以下操作:
User user = userRepo.findById(userId).get();
Iterable<Authorization> authorizations = user.getAuthorizations();
推荐阅读
- python - 在 pandas DataFrame 上使用 scikit-learn ColumnTransfer 后保留列名
- flutter - 如何在flutter中更改TextField的hintText FontFamily
- pointers - 当我想访问双指针时出现段错误
- python - 使用 PyPDF2 提取文本时的编码问题
- xquery - 使用 BaseX XQuery 代码处理纯 JSON API
- lamp - C++ 变量不是类型名称
- python - 如何从数组中选择组,修改并再次添加到他们的位置
- c - 如何在 GIMP C 插件中使用 GEGL 缩放颜色通道
- python - 使用理解列表创建具有交叉模式的矩阵
- regex - 使用双连字符重定向 URL 的正确 Nginx 正则表达式