FindRowCount не работает, когда bean имеет свойство с аннотацией @Formula
У меня есть следующий класс:
@Entity
@Table(name = "clients")
public class Client extends Model {
@Id
public int id;
@Formula(select = "inv.some_data",
join = "left join (select 1 as some_data) as inv")
public int someData;
public static Finder<String, Client> find =
new Finder<String, Client>(String.class, Client.class);
public static int countClientsWithData() {
return Client.find.where().gt("someData", 0).findRowCount();
}
}
Он имеет поле someData
(игровая структура автоматически генерирует геттеры и сеттеры). А также countClientsWithData
использует это поле в предложении where
. Теперь, если я делаю
int count = Client.countClientsWithData();
Он будет бросать NullPointerException
при попытке выполнить запрос
select count(*) from clients t0 where inv.some_data > ?
Похоже, findRowCount
не распознает объединение в аннотации @Formula
. Любые мысли о том, как обойти эту проблему?
Обновлен вопрос: проблема с сокращением до вызова findRowCount
.
Ответы
Ответ 1
Итак, вы хотите использовать счетчик без использования метода findRowCount() и без сбора всех данных.
Решение. Скопируйте тот же запрос и внесите его в форму select count(*) from ..
и используйте его для поиска count
Пример:
Если ваш запрос находится в форме.
Запрос: SELECT * FROM clients
Тогда эта строка кода Client.find.where().gt("some_data", 0).findRowCount();
будет эквивалентна..
Count Query: SELECT COUNT(*) FROM clients WHERE some_data > 0
Ответ 2
Одним из возможных способов может быть использование метода findlist() и использование его метода size() для получения количества строк вместо findRowCount() метод
return Client.find.where(). gt ( "totalOrdersAmount", 0).findList(). size();
Ответ 3
Вы должны отладить это и посмотреть, чего не хватает. Это либо ошибка, как описано, либо вы каким-то образом не ссылаетесь на то, что считаете себя. Мы все были там, хотя, но если вы можете остановиться на этой линии и увидеть свой объект, просто убедитесь, что все так, как вы ожидали. Как только вы добавляете попытки использовать поля базы данных и ссылаясь на них, опечатки, например, вызывают много головных болей.