型号:
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。
- 我读过 Projections ,但看起来和我想要的不一样。我不想创建任何额外的接口(interface),因为我已经有了所需的接口(interface)。
- 当然,我可以使用 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/