Я создал простой @NamedQuery:Java EE именованный запрос с SUM() не работает
@NamedQuery(name = "Etap.findSum", query = "SELECT e.czas FROM Etap e WHERE e.stan=1")
, который работает отлично. Поле e.czas
было отображено как Integer
и имеет тип INTEGER
в базе данных DB2. Теперь, когда я пытаюсь изменить его таким образом:
@NamedQuery(name = "Etap.findSum", query = "SELECT SUM(e.czas) FROM Etap e WHERE e.stan=1")
это не удается, и более того, редактор не дает намек на выбор поданную e.czas
в качестве параметра запроса. Когда я меняю тип поданного czas
на int
, подсказка указывается, но запрос все еще не работает (он работает при вызове из консоли IBM Data Studio).
метод, где я называю запрос приведена ниже (я всегда получаю -1 как результат):
public Integer suma(){
try{
Query q = em.createNamedQuery("Etap.findSum");
Integer suma = (Integer)q.getSingleResult();
return suma;
}
catch(Exception e)
{
return -1;
}
Что я делаю неправильно в этом случае?
«Я всегда получаю -1 в результате» означает, что есть исключение. Сделайте себе одолжение и распечатайте трассировку стека. – mustaccio
Вероятно, автоматическое расширение до 'Long', чтобы сумма ваших целых чисел была слишком большой для типа. Учитывая, что в документации для 'SUM (...)' явно указано это поведение, происходящее на стороне db, ORM, вероятно, должен последовать этому примеру. Если вы действительно уверены, что ваш результат может содержаться в int, наберите его после того, как будет рассчитана сумма. –
@mustaccio, вы правы, я искал трассировку стека без попытки, но, видимо, я пропустил что-то – MissAK