Dans ma base de données, j'ai une table (Defaults), et lorsque je génère une entité à partir d'une table, j'obtiens ces deux 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...
}
C’est pourquoi, car la clé primaire inclut les valeurs. Je veux compter toutes les lignes de la table, alors j'utilise ce code:
String sql = "SELECT COUNT(d) FROM Defaults d";
Query q = em.createQuery(sql);
long count = (long)q.getSingleResult();
Mais je reçois cette erreur:
org.hibernate.exception.SQLGrammarException: could not execute query
...
Java.sql.SQLSyntaxErrorException: ORA-00907: The right expression is missing from the arithmetic expression
Quel est le problème? Les autres requêtes de comptage avec d'autres entités fonctionnent.
J'utilise Hibernate.
Utilisez count(d.ertek)
ou count(d.id)
au lieu de count(d)
. Cela peut se produire lorsque vous avez une clé primaire composite dans votre entité.