hibernate条件包含count和group by query

时间:2014-11-10 07:01:14

标签: java hibernate

我需要将以下查询转换为hibernate条件查询。请帮忙

由于Votes表上的复合主键,我将某些主键与@Embeddable

分开,因此在某种情况下,createQuery无法正常工作
session.createQuery("select V.Vote_Option, count(V.Vote_Option) from Votes  V where V.Event_ID ="+eventId+" group by V.Vote_Option").list()

我尝试了以下标准。需要帮助来纠正它。

Criteria criteria = session.createCriteria(Votes.class);
            criteria.add(Restrictions.eq("Event_ID", eventId));
    criteria.setProjection(Projections.projectionList()
            .add(Projections.property("Vote_Option"))
            .add(Projections.property("count(Vote_Option)"))
            .add(Projections.groupProperty("Vote_Option")));

    List<String> showVotes= criteria.list();

以下是我的实体的结构

@Entity
@Table(name="Votes")

public class Votes {

public Votes(){}

@EmbeddedId
private Vote vote;

@Column(name = "Vote_Option")
private int Vote_Option;
//setter getters...

和复合主键的可嵌入对象

  @Embeddable
  public class Vote implements Serializable{

    public Vote(){}

    @Column(name="Event_ID")
    private int Event_ID;

    @Column(name="Voter_MSISDN")
    private long Voter_MSISDN;

     //setter getters...

请在这里建议更好的方式..

2 个答案:

答案 0 :(得分:0)

add(Projections.property("count(Vote_Option)"))无效。 您需要使用criteria.setProjection(Projections.rowCount())才能支持计数。

答案 1 :(得分:0)

顺便说一句,我使用createQury实现了如下列表 使用可嵌入实体来映射
从V.Event_ID更改为V.vote.Event_ID ...投票为@Embeddable

 session.createQuery("select V.Vote_Option, count(V.Vote_Option) from Votes  V where V.vote.Event_ID ="+eventId+" group by V.Vote_Option").list();