我的存储库类中有以下代码:
Root<Post> fromPost = query.from(Post.class);
Selection<Long> longSelection = criteriaBuilder.count(fromPost).alias("c");
Selection<Object> item = fromPost.get("creatorId").alias("item");
CriteriaQuery<GroupEntry> select = query.multiselect(longSelection, item);
select.groupBy(fromPost.get("creatorId"));
select.orderBy(criteriaBuilder.desc(criteriaBuilder.count(fromPost)));
在这里,我正在尝试使用CriteriaBuilder建立这样的查询:
select count(*), creator_id from post
group by creator_id
order by count(*) desc
但是,Hibernate不在count(*)
和count(post.post_id)
语句中生成select
,而是生成group by
。在给定情况下,第一个要比第二个快得多,因为它不使用数据库堆,而仅使用索引-与count(field)
不同。
一些其他详细信息:
我的Post
类如下:
import javax.persistence.*;
@Entity
@Table(name = "post")
public class Post implements Serializable {
@Id
@Column(name = "post_id", updatable = false)
protected String postId;
other fields...
}
GroupEntry
类包含id
,c
和item
列。