gpt4 book ai didi

java - 如何使用 Spring Data JPA 获取不同的实体字段?

转载 作者:行者123 更新时间:2023-12-02 03:26:25 25 4
gpt4 key购买 nike

型号:

class User {String firstName, String lastName};
class Job {String name, List<User> users, List<User> checkers};

免责声明。作业有名称、用户 - 从事该作业的用户以及检查者 - 检查工作结果的用户。

这是 Spring 数据存储库:

interface JobDao extends PagingAndSortingRepository<Job>{
List<Job> findByUsers(Collection<User> users); //this return list of Jobs.
List<User> findCheckersByUsers(Collection<User> users); //I'd like to get list of users that check work for provided users. But it doesn't work this way.
}

这是我想要得到的简单 SQL:

SELECT DISTINCT checker FROM job WHERE job.user in (?1) -- ?1 - here are users provided

如何做到这一点?

P。

  1. 我读过 Projections ,但看起来和我想要的不一样。我不想创建任何额外的接口(interface),因为我已经有了所需的接口(interface)。
  2. 当然,我可以使用 findByUsers 方法,然后使用 Java 流 API,jobs.stream().map(Job::getChecker).collect(toSet()); 但事实并非如此看起来很漂亮。

最佳答案

首先,我会将此方法放在 UserRepository 中,因为它用于查找用户。但无论如何,你只需要

@Query("select distinct checker from Job job"
+ " join job.checkers checker"
+ " join job.users user"
+ " where user in :checkedUsers")
List<User> findCheckersOf(@Param("checkedUsers") Set<User> users)

关于java - 如何使用 Spring Data JPA 获取不同的实体字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38814652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com