具有复合主键查询的 JPA COUNT 不起作用
Posted
技术标签:
【中文标题】具有复合主键查询的 JPA COUNT 不起作用【英文标题】:JPA COUNT with composite primary key query not working 【发布时间】:2014-03-11 02:49:00 【问题描述】:在我的数据库中,我有一个表(默认值),当我从表中生成一个实体时,我得到了这两个类:
@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...
这就是为什么主键包含值的原因。 我想统计表中的所有行,所以我使用了这段代码:
String sql = "SELECT COUNT(d) FROM Defaults d";
Query q = em.createQuery(sql);
long count = (long)q.getSingleResult();
但我收到此错误:
org.hibernate.exception.SQLGrammarException: could not execute query
...
java.sql.SQLSyntaxErrorException: ORA-00907: The right expression is missing from the arithmetic expression
有什么问题?与其他实体的其他计数查询正在运行。
我正在使用休眠。
【问题讨论】:
【参考方案1】:使用count(d.ertek)
或count(d.id)
而不是count(d)
。当您的实体具有复合主键时,可能会发生这种情况。
【讨论】:
是的,这是有效的:SELECT COUNT(d.DefaultsPK.value1) FROM Defaults d
以上是关于具有复合主键查询的 JPA COUNT 不起作用的主要内容,如果未能解决你的问题,请参考以下文章