JPA + Hibernate + PostgreSQL-左联接和分组依据

时间:2019-11-23 09:24:44

标签: postgresql hibernate jpa jpql

我只是想知道如何使用JPQL或Criteria构建器在JPA中创建“ LEFT JOIN ... GROUP BY”。我有实体对象“用户”,“问题”和“答案”。假设我希望获得有关回答特定问题的用户数量的统计信息。

使用JPA和SQL,它看起来像这样

select x.value, count(u) from users u
left join (
   select a.* from answers a
   join questions q on q.id = a.question_id 
   where q.name = 'participation') as x on x.user_id = u.id
group by x.value

Query q = em.createNativeQuery(queryString);
List<Object[]> result = q.getResultList();

将会产生这样的结果

value       count
[NULL]      102      // users which have no answers
Yes         10
No          34
Perhaps     56

如何使用JPQL或CriteriaBuilder实现此目标?

这是我的域名课程

@Entitiy
@Table(name = "users")
public class User {
   @Id
   private Long id;
}

@Entitiy
@Table(name = "answers")
public class Answer {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;

    @OneToOne
    @JoinColumn(name = "question_id", nullable = false)
    private Question question;

    private String value;
}

@Entitiy
@Table(name = "questions")
public class Question {
    @Id
    private Long id;

    private String name;
}

1 个答案:

答案 0 :(得分:0)

查询可能看起来像这样

SELECT a.value, count(u.id) FROM User u LEFT JOIN Answer a ON a.user.id = u.id LEFT JOIN a.question q GROUP BY a.value;