Проблема с проектом JPA в Eclipse - ошибка в аннотированном классе @Entity: таблица "xxx" не может быть решена - PullRequest
10 голосов
/ 19 сентября 2011

Я пытаюсь создать простой проект EJB + JPA в Eclipse (Индиго). Я создал новый проект EJB, где:

  • Цель: существующий сервер Glassfish
  • Конфигурация: EJB-модуль + файлы дескриптора развертывания GlassFish + Java + JPA В окне JPA Facet я объявляю соединение с postgres db (ping успешно)

У меня проблема при попытке определить сущность: таблица "Сотрудник" не может быть решена. Я добавил аннотацию @Table с указанным параметром name, но это не сработало. Мой файл persistence.xml:

    <persistence-unit name="pu_name">
    <jta-data-source>jdbc/baza1Postgres</jta-data-source>
</persistence-unit>

В Glassfish я определил ресурс JDBC с именем: "jdbc / baza1Postgres"
Как "знать затмение", если моя таблица существует? Что еще я должен настроить?

Ответы [ 7 ]

36 голосов
/ 11 февраля 2013

Найдено это решение для ошибки «Таблица xxx не может быть решена»:

В Eclipse перейдите в «Окно» -> «Установки» -> «Проверка», «JPA Validator», выключите для сборки.

Иногда вы разрабатываете приложение вместе с новой схемой базы данных, но вы получаете это:

Схема "null" не может быть разрешена для таблицы "XXXX".

Вероятно, это не должно быть включено по умолчанию; Скорее всего, люди собираются создавать новые приложения с нуля, чем создавать новые приложения для старых баз данных, и даже если они строят из старых, инструменты JPA Eclipse имеют функцию построения сущностей из таблиц. "

6 голосов
/ 01 мая 2013

В Eclipse, чтобы сделать его счастливым, я должен был создать таблицу с помощью JPA Tools.

Щелкните правой кнопкой мыши на Project> JPA Tools> Создать таблицы из сущностей

Полагаю, вы также можете отключить проверку, но создание таблицы, кажется, имеет больше смысла.

4 голосов
/ 22 апреля 2014

Я использую Eclipse. Я отметил, что таблицы распознавания затмений используются в окне «Анализ источника данных» в JPA (возможно, нет необходимости компилировать, но полезно проверять базу данных в той же IDE затмения). Затем, когда я создал соединение с базой данных в этом окне, я получил данные изменения проблемы в свойствах соединения:

Не работает (таблица не может быть решена):

Database: my_database
URL: jdbc:mysql://localhost:3306
User Name: jpa_user
Password: jpa_pass

Исправлено (я добавляю базу данных в поле URL):

Database: my_database
URL: jdbc:mysql://localhost:3306/my_database
User Name: jpa_user
Password: jpa_pass

Не забудьте использовать @Table (name = "") в ваших сущностях, если в базе данных таблицы не в верхнем регистре.

3 голосов
/ 19 сентября 2011

Вам нужно указать в своем файле persistence.xml, где искать сущности, взгляните на учебник Java EE 6 , вот пример, взятый оттуда:

Единицы персистентности

Единица персистентности определяет набор всех классов сущностей, которые управляются экземплярами EntityManager в приложении.Этот набор классов сущностей представляет данные, содержащиеся в одном хранилище данных.

Единицы персистентности определяются в файле конфигурации persistence.xml.Ниже приведен пример файла persistence.xml:

 <persistence>
   <persistence-unit name="OrderManagement">
      <description>This unit manages orders and customers.
            It does not rely on any vendor-specific features and can
            therefore be deployed to any persistence provider.
      </description>
      <jta-data-source>jdbc/MyOrderDB</jta-data-source>
      <jar-file>MyOrderApp.jar</jar-file>
      <class>com.widgets.Order</class>
      <class>com.widgets.Customer</class>
  </persistence-unit>
</persistence> 

Этот файл определяет единицу хранения с именем OrderManagement, которая использует источник данных с поддержкой JTA: jdbc / MyOrderDB.Элементы jar-file и class задают управляемые классы персистентности: классы сущностей, встраиваемые классы и сопоставленные суперклассы.Элемент jar-file определяет файлы JAR, которые видны упакованному блоку персистентности, который содержит управляемые классы персистентности, тогда как элемент class явно называет управляемые классы персистентности.

Также посмотрите на это stackoverflow вопрос с помощью hibernate вы можете сканировать ваши классы с аннотацией Entity

1 голос
/ 10 января 2016

У меня была эта ошибка, и я смог заставить ее работать очень мучительно.Я использую PostgreSQL.

Прежде всего, я сделал, как предложено выше, и отключил проверку для сборки.Затем я проверил валидацию вручную, подключив вещи.Мои шаги были в основном такими:

1: подключиться через Data Source Explorer к моей базе данных.Убедитесь, что соединение находится в правильном состоянии, когда вы идете в ТАБЛИЦЫ, и нажмите «Обновить».Нажатие кнопки «Обновить» для подключения не обновило таблицы.

2: Возможно, это необязательно, но я использовал JPA Tools для экспорта схемы в базу данных.И снова я нажимаю «Обновить», как на шаге 1.

3: Аннотируйте сущность как сущностью, так и таблицей.Добавьте имя в сущности, а также ИМЯ, КАТАЛОГ и СХЕМА в аннотации таблицы.

@Entity(name="DBAssembly")
@Table(name="DBAssembly",catalog="lag",schema="public")

4: Запустите проверку вручную.Добавление каталога было важно.Это очень придирчиво.

0 голосов
/ 16 февраля 2017

Это работает, но, в дополнение к ответу maxmcbyte (Спасибо !!), иногда лучше применить это решение только для некоторых проектов, сделайте это индивидуально, выбрав: свойства проекта> Проверка> Поворот вкл. «Включены специфичные для проекта настройки» и затем отключить Проверка JPA в столбце сборки .Смотрите изображение ...

Config

0 голосов
/ 29 сентября 2015

Другой вариант, использующий ответ maxmcbyte, - установить его только для конкретных проектов. Щелкните правой кнопкой мыши по проекту и выберите «Проверка». Включите специфичные для проекта настройки и отключите JPA Validator for Build.

...