簡體   English   中英

如何使用Spring Data JPA獲得不同的實體字段?

[英]How to get distinct entity fields using Spring Data JPA?

該模型:

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

免責聲明 作業具有名稱,執行此作業的用戶和檢查器(檢查工作結果的用戶)。

這是Spring Data存儲庫:

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

這個怎么做?

聚苯乙烯

  1. 我已經閱讀了有關Projections的內容 ,但看起來與我想要的不一樣。 我不想創建任何其他接口,因為已經有了所需的接口。
  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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM