HSQLDB: count (*) возвращает десятичное число


Я использую hsqldb в памяти для выполнения тестов JUnit, для проверки объектов доступа к данным.

В DAO я использую JPA Entity Manager для запуска следующего собственного SQL-запроса:

SELECT COUNT(*) FROM AAA

Код выглядит следующим образом:

final Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM AAA");
return (Integer) query.getSingleResult() == 0;

Оператор return позволяет мне проверить, есть ли у меня счетчик, равный 0. Он прекрасно работает в рабочей среде (используется DB2).

Но в нашем тесте env, с hsqldb в памяти, это не удается, потому что запрос не возвращает целое число или int, но возвращает a BigDecimal (приведение не удается).

Используется HsqlDB 2.3.0. Он прекрасно работал и раньше, с версией 1.8 hsqldb.

Знаете ли вы, почему возникает эта проблема ? И как я могу сделать count(*) возвращающим целое число ?

Я хотел бы, насколько это возможно, оставить производственный код без изменений. Потому что я уже знаю, что могу решить эту проблему с помощью приведения sql, но это не идеально с моей точки зрения:

SELECT cast(COUNT(*) as int) FROM AAA
1 2

1 ответ:

Вы можете изменить код Java, чтобы он был независимым от платформы. Приведите возвращаемое значение к Number и используйте getLong () вместо сравнения целого числа.

HSQLDB фактически возвращает длинное, а не большое число