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

标签 java mysql database hibernate hql

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

这是我的 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;
    }


}

请帮助我。

最佳答案

我会将 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();

关于java - Hibernate:如何从查询结果中获取属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915443/

相关文章:

java - JAXWS 代码生成和实现以及 JDK1.5 的 Spring

java - 支持具有相同子节点的 JTree 节点

php - mysql_query 注入(inject) - 替换返回的字段

database - 在数据库列中存储分隔列表真的那么糟糕吗?

java - 数组变量的错误

java - Android - Spinner 异步下载文件不保存

php - TCPDF 只打印最后一行

mysql - SQL 错误 1215(HY000) 无法添加外键约束。

MySQL 数据库连接查询

mysql - 当总计在 mysql 中并列时,将优先级设置为一行