web-dev-qa-db-ja.com

複合プライマリキークエリを使用したJPA COUNTが機能しない

データベースにはテーブル(デフォルト)があり、テーブルからエンティティを生成すると、次の2つのクラスが取得されます。

@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

何が問題ですか?他のエンティティとのその他のカウントクエリは機能しています。

私は休止状態を使用しています。

31
victorio

count(d.ertek)の代わりにcount(d.id)またはcount(d)を使用します。これは、エンティティに複合主キーがある場合に発生する可能性があります。

53
Sabuj Hassan