sql - 具有复合主键查询的 JPA COUNT 不起作用

标签 sql hibernate jpa count composite-primary-key

在我的数据库中,我有一个表(默认),当我从表生成实体时,我得到这两个类:

@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

有什么问题吗?与其他实体的其他计数查询正在运行。

我正在使用 hibernate 。

最佳答案

使用 count(d.ertek)count(d.id) 而不是 count(d)。当您的实体具有复合主键时,可能会发生这种情况。

关于sql - 具有复合主键查询的 JPA COUNT 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21733673/

相关文章:

java - 查询包含 java.sql.Date 列的表时,Jpa findAll() 会导致错误

java - id 列和 JPA 的问题

java - 使用 Java 持久性查询语言仅在子查询中 FETCH FIRST n ROWS

hibernate 活跃交易

java - 如何解决: java. lang.NoSuchMethodError : javax. persistence.EntityManager.createStoredProcedureQuery(Ljava/lang/String;)

java - 具有继承映射的一对多 JPA 映射

sql - 按sql中的另一列对具有重复值的列进行排序

sql - Excel ODBC 数据连接查询刷新每个查询所需的时间

sql - 如果在join t-sql中

mysql - 如果它是 phpMyAdmin 中的特定值,则更新另一个表的表列字段