我正在尝试执行下面提到的查询,它在mysql中运行但在Hibernate(hql)上运行结果不正确。 我的查询结果必须是一条记录但在Hibernate中我得到两条记录。是否有可能Hibernate不执行该组(在我的查询中),因此结果由两个ID组成?
Query query = session.createQuery("select avg(valore)as punteggio,id, from Voto where STR_TO_DATE(datav,'%Y-%m-%d')> CURRENT_DATE - 7 group by id order by punteggio DESC");
List<Object[]> list = query.list();
if(list.size()> 0)
{
System.out.println(list.size());
for (Object[] aRow : list) {
Integer sum = (Integer) aRow[0];
Integer category = (Integer) aRow[1];
System.out.println(category +" - " + sum);
}
}
这是我的Hibernate代码
@Entity
@Table(name="Voto")
public class Voto{
@Id
@GeneratedValue
@Column(name = "idv")
private int idv;
@Column(name = "valore")
private int valore;
@Column(name = "datav")
private String datav;
@ManyToOne
@JoinColumn(name = "idp")
private Pubblico pubblico;
@ManyToOne
@JoinColumn(name = "id")
private Artista artista;
public Voto(int idv,int valore,String datav,Pubblico pubblico, Artista artista){
this.idv=idv;
this.valore=valore;
this.datav=datav;
this.pubblico=pubblico;
this.artista=artista;
}
public Voto() {
// TODO Auto-generated constructor stub
}
public int getidv() {
return idv;
}
public void setidv(int idv) {
this.idv = idv;
}
public int getvalaore() {
return valore;
}
public void setvalore(int valore) {
this.valore = valore;
}
public String getdatav() {
return datav;
}
public void setdatav(String datav) {
this.datav= datav;
}
public Pubblico getPubblico() {
return pubblico;
}
public void setPubblico(Pubblico pubblico) {
this.pubblico = pubblico;
}
public Artista getArtista() {
return artista;
}
public void setArtista(Artista artista) {
this.artista = artista;
}
}
请帮帮我。
答案 0 :(得分:1)
我会将id
列添加到您的实体对象
@Column(name = "id", insertable=false, updateable=false)
private String id;
然后像这样使用Criteria
:
List result = session.createCriteria(Voto.class)
.setProjection(Projections.projectionList()
.add(Projections.groupProperty("id"))
.add(Projections.avg("valore"))
).list();