it-swarm.com.ru

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

Я пытаюсь создать простой проект 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"
Как "Eclipse знать", если моя таблица существует? Что еще я должен настроить?

10
Adam Szecowka

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

В Eclipse перейдите в Window -> Preferences -> Validation, JPA Validator, выключите для Build.

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

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

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

35
maxmcbyte

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

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

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

5
bobtheowl2

Я использую Затмение. Я заметил, что Eclipse распознает таблицы, когда я использую окно «Data Source Explorer» в JPA eviroment (вероятно, нет необходимости компилировать, но полезно проверять базу данных в той же Eclipse 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 = "") в ваших сущностях, если в базе данных таблицы не в верхнем регистре.

4
molavec

Вам нужно указать в своем файле 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, которые являются видимый для упакованного модуля персистентности, который содержит управляемый персистентные классы, тогда как элемент класса явно именует управляемые персистентные занятия.

Также взгляните на этот вопрос stackoverflow используя hibernate, вы можете сканировать ваши классы с аннотацией Entity

3
Ross

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

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

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

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

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

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

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

1
K.Nicholas

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

 Config

0
cristianchiess

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

0
AngryMonkey