Таблица не найдена с Hibernate и HSQLDB

Мы используем hibernate entitymanager для сопоставления наших сущностей через JPA. И мы используем базу данных HSQLDB в памяти для модульного тестирования. Все было хорошо, пока недавний рефакторинг модели не начал вызывать следующую ошибку:

17:55:48.516 [main] WARN  o.h.util.JDBCExceptionReporter - SQL Error: -22, SQLState: S0002
17:55:48.517 [main] ERROR o.h.util.JDBCExceptionReporter - Table not found in statement

Я не могу опубликовать соответствующий SQL, но может ли кто-нибудь указать мне возможные причины вышеуказанной ошибки? тем более, что я знаю, что код работал раньше. Кажется, что спящий режим генерирует недопустимые sql из-за рефакторинга?


person shipmaster    schedule 18.09.2009    source источник


Ответы (5)


А стол на самом деле там? Включите вывод SQL для Hibernate и сравните его с фактической схемой базы данных.

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

Или у вас могут быть более старые классы где-то в пути к классам, вызывающие чтение неправильных аннотаций.

person ChssPly76    schedule 18.09.2009
comment
Оказывается, сущность была названа зарезервированным словом, что привело к сбою создания таблицы. - person shipmaster; 30.09.2009
comment
зарезервированное слово - у меня была такая же проблема! - person Maciek Kreft; 27.09.2010

Это также может указывать на несоответствие между драйвером JDBC и диалектом Hibernate.

Мы получили это, когда соединение драйвера JDBC было HSQLDB, а диалект Hibernate был org.hibernate.dialect.Oracle10gDialect.

Соответствующее сообщение об исключении: [ОШИБКА]: не удалось получить метаданные базы данных java.sql.SQLException: таблица не найдена в операторе [выбрать имя_последовательности из всех_последовательностей]

person Kees van Dieren    schedule 07.06.2012
comment
В Hibernate должен быть установлен диалект SQL. Он должен соответствовать поставщику базы данных, настроенному в jdbc uri. Пример того, как настроить Hibernate session-factory для использования определенного диалекта SQL, можно найти здесь: docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ - person Kees van Dieren; 10.12.2014

Мы также получали такое же исключение. Оказывается, свойство hibernate.dialect было установлено как org.hibernate.dialect.Oracle10gDialect, а база данных H2 служит источником данных. Решение состоит в том, чтобы удалить hibernate.dialect и не использовать никаких значений. В Hibernate есть возможность автоматически определять метаданные на основе диалекта, полученные из конфигурации источника данных
Для получения дополнительной информации о том, как hibernate автоматически определяет диалект
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/portability.html

person Hari    schedule 07.04.2016

У меня тоже была эта проблема, в моем случае у меня было что-то подобное в сущности

@Column (name = "AVAIL_TARGET_PERCENT", columnDefinition = "number (5,2)", nullable = false)

Просто избегайте columnDefinition (уберите его!), и все будет в порядке. я так и сделал, проблема решилась

person Ayodeji Babaniyi    schedule 06.02.2013

Использовать зависимость

groupId org.hsqldb    

вместо

groupId hsqldb 

в вашем pom.xml или gradle. Проверьте https://mvnrepository.com/search?q=hsqldb.

person Jeroen Heijning    schedule 01.06.2020