spring - 用于在 REST API 上保存具有多个关系的实体的存储库与 JQPL
问题描述
我是 Hibernate 的新手,想了解何时使用自定义 JPQL 与使用存储库保存实体的建议
这是在 REST API 上
User
Id id,
String name
List<Request> requests
Request
Id id
User user
User manager
所以从用户到请求有两个 OneToMany 关系
表格是:
users{id,name}
requests{id,user_id,manager_id}
场景 a) 有两个存储库:用户和请求
我在 POST 中收到两个用户 ID 的新请求
Request request = new Request();
User user = userRepo.findById(userId);
User manager = userRepo.findById(managerId);
request.setUser(user);
request.setManager(manager);
requestRepo.save(request);
我发出了两个用户读取,然后保存将只使用它们是我已经拥有的 id - 在我看来,如果我只是执行一个插入它会更有效
问题:我应该像上面那样使用还是创建查询,还是根据具体情况进行查询?这里的最佳做法是什么?
场景 b) 单用户存储库用户 - 假设用户(根)和请求的聚合
new Request userId 将来自查询字符串,managerId 将来自 POST
Request request = new Request();
User user = userRepo.findById(userId);
User manager = userRepo.findById(managerId);
request.setManager(manager);
user.addRequest(request);
userRepo.save(user);
表看起来相同,最终结果将与场景 a) 相同,但用户请求列表可能会有额外的读取
同样的问题:我应该像上面那样使用还是创建查询,还是根据具体情况进行查询?
假设我不再需要这些对象
这是一个简单的例子,在现实世界中,用户可能有几十个属性和很多集合(尽管我可以懒惰地获取这些)。Request 还可以与其他实体有更多关系,这种方法需要我阅读它们中的每一个
谢谢
解决方案
推荐阅读
- rest - 如何从我的 Spring Boot 应用程序控制器创建对另一个 API 的 PATCH 请求?
- java - 在单独的文件夹中获取所有库 jar
- scala - 在 Scala 中运行测试用例会给出“丢弃的非单元值”
- powershell - 有没有办法通过智能卡通过powershell远程激活Windows?
- batch-file - 批量循环数组
- javascript - 比较对象并提取深度差异
- python - 使用请求登录后无法使用 Selenium 获取配置文件名称
- sql-server - SSIS - 控制错误日志发送到 SSIS 目录
- node.js - 错误异步 Node.js 调用全局 sql 连接存在/无法设置标头
- typo3 - 为特殊插件类型更改 TYPO3 TCEFORM header_layout 和 header