Почему одна сущность игнорируется при создании схемы с JPA2? - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть небольшая схема, состоящая из ~ 10 классов, сопоставленных jpa2 с hibernate в качестве провайдера. Все классы создаются одинаковым базовым способом (@Entity аннотация для класса, id с @Id и @GeneratedValue). Все классы имеют конструкторы по умолчанию и методы получения / установки по умолчанию.

Все классы, кроме одного, связаны друг с другом (через ассоциации или наследование). И этот один класс не получает таблицу базы данных, созданную в базе данных во время процесса генерации схемы.

Я пробовал следующие настройки с hbm2ddl.auto:

create : Все таблицы, кроме одной, созданы. Когда к объекту обращаются в первый раз, генерируется исключение: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table '...' doesn't exist (или эквивалент оракула, если код запускается в БД Oracle).

validate : hibernate жалуется на отсутствующую таблицу во время проверки схемы.

update : таблица не создается, и при первом обращении к объекту этого класса создается исключение (например, с create).

У кого-нибудь есть идеи по этому поводу?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Попробуйте следующее: измените класс этой сущности, чтобы иметь только поле идентификатора.Убедитесь, что класс помечен @Entity, а в поле id - @Id.Убедитесь, что этот объект объявлен в списке отображаемых классов (или находится в пакете, который объявлен среди отображенных пакетов).Добавьте запись уровня «TRACE» в «org.hibernate» через log4j.xml.Запустите сеанс гибернации (запустите ваше приложение) и найдите в журнале операторы, которые Hibernate создает для создания схемы.Если оттуда отсутствует таблица, значит, вы неправильно конфигурируете bean-компонент, и hibernate не считает его частью модели.Если есть sql для создания соответствующей таблицы, но при ее выполнении возникает ошибка, посмотрите, что на самом деле содержит этот SQL, это может помочь вам выяснить, что не нравится hibernate.Когда «пустой» компонент будет наконец создан, начните добавлять свойства / ассоциации к нему по одному и повторите ту же проверку, что и раньше.В какой-то момент вы получите ошибку, когда добавите что-то определенное, и вам нужно будет найти решение оттуда.

0 голосов
/ 14 ноября 2011

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

Я предположил, что сообщение ORA-01747 хочет сообщить мне о неудачном выборе, но вместо этого при более внимательном рассмотрении выяснилось, что на самом деле указано, почему таблица вообще не была создана.

...