如何在子查询(hql)中选择多个列

时间:2019-08-29 00:43:32

标签: java hibernate jpa subquery hql

是否可以在hql的子查询中选择多个列?

我想将以下mysql查询转换为hql

select u.name, sub.cnt from user u
  inner join (select user_id, count(user_id) cnt from user_log group by user_id order by cnt desc limit 5) sub 
    on u.id = sub.user_id;

但是在hql中,我知道只能在where子句中使用子查询

1 个答案:

答案 0 :(得分:0)

我不知道纯粹的Hibernate解决方案。我在博客文章中谈到了这一点。

但是您可以考虑使用FluentJPA解决方案:

SELECT t0.name, q0.count 
FROM USER t0  INNER JOIN (SELECT t1.user_id, COUNT(t1.user_id) AS count 
FROM USER_LOG t1 
ORDER BY  COUNT(t1.user_id)  DESC   
LIMIT 5 ) q0  ON (t0.id = q0.user_id)

产生以下SQL:

@Entity
@Getter
@Table(name = "USER")
class User {
    private Long id;
    private String name;
}

@Entity
@Getter
@Table(name = "USER_LOG")
class UserLog {
    private Long userId;
}

@Tuple
@Getter
class UserIdCount {
    private Long userId;
    private int count;
}

@Tuple
@Data
class UserNameCount {
    private int count;
    private String name;
}

我使用的实体(用龙目岛声明):

class Decoder    {
public:
    virtual void run() {}
    //...
}