首页 > 解决方案 > 用于在 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 还可以与其他实体有更多关系,这种方法需要我阅读它们中的每一个

谢谢

标签: springhibernateorm

解决方案


推荐阅读