我需要将以下查询转换为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...
请在这里建议更好的方式..
答案 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();