【问题标题】:Hibernate: how get attributes from a query's result?Hibernate:如何从查询结果中获取属性?
【发布时间】:2017-03-20 22:53:40
【问题描述】:

我正在尝试执行下面提到的查询,该查询在 mysql 中有效,但在 Hibernate(hql) 上无效,结果不正确。 我的查询结果必须是一条记录,但在 Hibernate 中我得到两条记录。 Hibernate 是否有可能不执行 group by(在我的查询中),因此结果由两个 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);
    }
}

这是我的休眠代码

@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;
    }


}

请帮帮我。

【问题讨论】:

    标签: java mysql database hibernate hql


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2018-12-06
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多