Hibernate:如何从查询的结果中获取属性?

时间:2017-03-20 22:53:40

标签: java mysql database hibernate hql

我正在尝试执行下面提到的查询,它在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;
    }


}

请帮帮我。

1 个答案:

答案 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();