2009-09-18 1 views
3

Мы используем hibernate entitymanager для отображения наших объектов через JPA. И мы используем базу данных в базе данных HSQLDB для модульного тестирования. Все было хорошо, пока недавно рефакторинг модели не стали причиной следующее сообщение об ошибке:Таблица не найдена с Hibernate и 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 из-за рефакторинга?

ответ

2

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

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

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

+3

Оказывается, компания была названа в зарезервированное слово, вызывая создание таблиц на провал. – shipmaster

+0

зарезервированное слово - у меня была такая же проблема! –

3

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

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

Соответствующее сообщение об исключении: [ERROR]: не удалось получить метаданные базы данных java.sql.SQLException: таблица не найдена в заявлении [выберите sequence_name из all_sequences]

+0

И как вы его решили? – dvtoever

+0

Спящий режим должен быть установлен на SQL Dialect. Он должен соответствовать поставщику базы данных, настроенному в jdbc uri. Пример того, как настроить сеансовую фабрику Hibernate для использования определенного диалекта SQL, можно найти здесь: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch01.html# учебник-firstapp-конфигурации –

1

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

@column (имя = "AVAIL_TARGET_PERCENT", ColumnDefinition = "число (5,2)", обнуляемым = ложь)

Просто избежать ColumnDefinition (взять его!) и все должно быть в порядке. Я сделал это, и проблема была исправлена.

1

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

Смежные вопросы