此JPA COUNT选择查询有什么问题? [英] What is wrong with this JPA COUNT select query?

查看:267
本文介绍了此JPA COUNT选择查询有什么问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的db中,我有一个表(Defaults),当我从表中生成一个实体时,我得到了这两个类:

  @Entity 
public class Defaults实现Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
保护DefaultsPK DefaultsPK;
@Column(name =ERTEK)
private String ertek;

getter / setter ...
}

@Embeddable
public class DefaultsPK implements Serializable {
@Basic(optional = false)
@Column(name =VALUE_1)
private String value1;
@Basic(可选= false)
@Column(name =TYPE)
私有字符串类型;
@Basic(可选= false)
@Column(name =VALID_FROM)
@Temporal(TemporalType.TIMESTAMP)
private日期validFrom;
@Basic(可选= false)
@Column(name =VALID_TO)
@Temporal(TemporalType.TIMESTAMP)
私有日期validTo;

getter / setter ...
}

即为什么因为主要关键是包括价值。
我想计算表中的所有行,所以我使用下面的代码:

  String sql =SELECT COUNT(d)FROM Defaults d; 
Query q = em.createQuery(sql);
long count =(long)q.getSingleResult();

但是我收到这个错误:

  org.hibernate.exception.SQLGrammarException:无法执行查询
...
java.sql.SQLSyntaxErrorException:ORA-00907:正确的表达式从算术表达式

这是什么问题?其他计数查询与其他实体正在工作。



我使用hibernate。

解决方案使用 count(d.ertek) count(d.id)而不是计数(d)。这可以在您的实体具有复合主键时发生。


In my db, I have a table (Defaults), and when I generate an entity from table, I get these two classes:

@Entity
public class Defaults implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected DefaultsPK DefaultsPK;
    @Column(name = "ERTEK")
    private String ertek;

    getter/setter...
}

@Embeddable
public class DefaultsPK implements Serializable {
    @Basic(optional = false)
    @Column(name = "VALUE_1")
    private String value1;
    @Basic(optional = false)
    @Column(name = "TYPE")
    private String type;
    @Basic(optional = false)
    @Column(name = "VALID_FROM")
    @Temporal(TemporalType.TIMESTAMP)
    private Date validFrom;
    @Basic(optional = false)
    @Column(name = "VALID_TO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date validTo;

    getter/setter...
}

That is why becaues the primary key is including the values. I want to count all the rows in the table, so I use this code:

String sql = "SELECT COUNT(d) FROM Defaults d";
Query q = em.createQuery(sql);
long count = (long)q.getSingleResult();

But I am getting this error:

org.hibernate.exception.SQLGrammarException: could not execute query
...
java.sql.SQLSyntaxErrorException: ORA-00907: The right expression is missing from the arithmetic expression

What is the problem? The other count queries with other entities are working.

I am using hibernate.

解决方案

Use count(d.ertek) or count(d.id) instead of count(d). This can be happen when you have composite primary key at your entity.

这篇关于此JPA COUNT选择查询有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆