【问题标题】:Translating JPQL to QueryDSL将 JPQL 转换为 QueryDSL
【发布时间】:2014-10-19 05:27:56
【问题描述】:

我在将以下方法转换为 QueryDSL 时遇到问题,非常感谢一些反馈!

javax.persistence.TypedQuery<Long> query = em().createQuery(
        "SELECT COUNT( DISTINCT b ) " +
                "FROM Project a " +
                "JOIN a.projectParticipants b " +
                "WHERE a.projectType IN :projectTypes " +
                "AND a.projectStatus = :projectStatus", Long.class
);
query.setParameter("projectTypes", filter.getProjectTypes());
query.setParameter("projectStatus", ProjectStatus.ACTIVE);
return query.getSingleResult();

项目类:

public class Project {

    @ManyToMany
    @JoinTable(name = "project_user", inverseJoinColumns = @JoinColumn(name = "user_id"))
    private Set<User> projectParticipants = new TreeSet<>();

}

代表项目projectParticipation集合的project_user表:

CREATE TABLE IF NOT EXISTS `project_user` (
  `user_id` bigint(20) NOT NULL,
  `project_id` bigint(20) NOT NULL,
  PRIMARY KEY (`user_id`,`project_id`),
  KEY `project_user_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【问题讨论】:

    标签: java mysql jpql querydsl


    【解决方案1】:

    以下应该可以工作

    query.from(a)
      .join(a.projectParticipants, b)
      .where(a.projectType.in(projectTypes), a.projectStatus.eq(projectStatus))
      .singleResult(b.countDistinct());
    

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 2018-03-16
      • 2011-09-29
      • 2019-01-13
      • 2019-10-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      相关资源
      最近更新 更多