Что не так с этим запросом выбора JPA COUNT?
В моей БД у меня есть таблица (по умолчанию), и когда я генерирую сущность из таблицы, я получаю эти два класса:
@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)
, Это может произойти, когда у вас есть составной первичный ключ в вашей организации.