此JPA COUNT选择查询有什么问题? [英] What is wrong with this JPA COUNT select query?
本文介绍了此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屋!
查看全文