Таблица не найдена в Hibernate и HSQLDB - PullRequest
3 голосов
/ 18 сентября 2009

Мы используем 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, о котором идет речь, но может ли кто-нибудь дать мне указания относительно возможных причин вышеуказанной ошибки? тем более, что я знаю, что код работал раньше. Похоже, что hibernate генерирует недействительные sqls из-за рефакторинга?

Ответы [ 4 ]

3 голосов
/ 07 июня 2012

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

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

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

2 голосов
/ 18 сентября 2009

Ну, а таблица на самом деле там? Включите вывод SQL для Hibernate и сравните его с реальной схемой базы данных.

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

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

1 голос
/ 07 апреля 2016

Мы также получали то же исключение. Оказывается, свойство 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

1 голос
/ 06 февраля 2013

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

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

Просто избегайте columnDefinition (уберите его!), И все будет в порядке. Я сделал это, и проблема была исправлена ​​

...