Подтвердить что ты не робот

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.

4b9b3361

Ответ 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

Вы должны отладить это и посмотреть, чего не хватает. Это либо ошибка, как описано, либо вы каким-то образом не ссылаетесь на то, что считаете себя. Мы все были там, хотя, но если вы можете остановиться на этой линии и увидеть свой объект, просто убедитесь, что все так, как вы ожидали. Как только вы добавляете попытки использовать поля базы данных и ссылаясь на них, опечатки, например, вызывают много головных болей.