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

标签 java spring hibernate spring-data spring-data-jpa

型号:

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/

相关文章:

具有抽象类/继承的 Spring Data Rest Repository

java - Spring Data JPA ManyToOne 双向

java - 如何在某些情况下忽略@SQLDelete注释

java - Hangman 代码问题 (Java)

单复数相同的项目集合的 Java 命名约定

java - 通过intellij部署到azure tomcat实例

java - Spring启动Apache kafka Binder 项目,application.properties spring.cloud.stream.kafka.binder。 jaas 属性未知

java - hql 不删除查询确定

java - 如何禁用 Java 扩展机制

java - 在 xjc 类生成期间设置 XmlType