Intellij IDEA: укажите источник данных для проверки JPA
У меня есть проект Spring для небольшого веб-приложения, настроенного в Intellij IDEA.
Он использует JPA поверх Hibernate для слоя persistence. Источник данных (MySQL) определен в контексте приложения Spring:
<!-- Values are configured via the property override -->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value=""/>
<property name="url" value=""/>
<property name="username" value=""/>
<property name="password" value=""/>
</bean>
Фактическое значение считывается из файла свойств и вводится во время выполнения с помощью Spring с использованием механизма переопределения свойств.
И затем источник данных вводится в диспетчер сущностей factory в том же контексте приложения:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="myDataSource"/>
</bean>
Наконец, менеджер объектов вводится в DAO с помощью аннотации:
/**
* Shared, thread-safe proxy for the actual transactional EntityManager
*/
@PersistenceContext
private EntityManager em;
Все работает отлично, когда я создаю и развертываю его в Tomcat, но проверка Intellij JPA, похоже, не понимает, откуда взять источник данных.
В моих сущностях имена имен имен и столбцов таблиц подчеркнуты красным цветом, а сообщение проверки - "невозможно разрешить таблицу" или "невозможно разрешить столбец":
@Entity
@Table(name = "domain")
public class Domain extends AbstractAgendaEntity {
В этом примере это часть "domain"
, которая не считается действительной.
Я вручную настроил свою базу данных в окне инструмента "База данных", я могу видеть мои таблицы и выполнять SQL-запросы в консоли.
Как я могу сообщить Intellij использовать этот источник данных для разрешения имен таблиц для моих объектов JPA?
Ответы
Ответ 1
Наконец-то я узнал, как это сделать.
Ключом является окно инструмента "Постоянство". По-видимому, он доступен после добавления фасета JPA, но это отдельное окно инструментов.
Чтобы открыть его: menu "view" → Tool Windows → Persistence
В этом окне вы видите свое приложение с различными элементами, связанными с сохранением (я вижу persistence.xml
, entityManagerFactory
из контекста Spring и myUnit
, который я не знаю, откуда он.
Здесь вы можете щелкнуть правой кнопкой мыши по любому элементу и выбрать "Назначить источник данных".
Это открывает всплывающее диалоговое окно с небольшой таблицей, содержащей элементы персистентности в левом столбце и источник данных, назначенный ей в правом столбце. Вы можете назначить источник данных из окна "База данных" там, поэтому я выбрал источник данных, который я настроил для моего MySQL DB и voilà, ошибки проверки исчезли.
Но если я ввожу неправильное имя таблицы или столбца, я все равно получаю сообщение об ошибке, которое довольно аккуратно.
Ответ 2
Прежде всего, вам нужно добавить источник данных в свою среду IDE. Вы можете сделать это на вкладке "База данных", как правило, с правой стороны. Вы можете импортировать этот источник данных из своего кода. Вы должны убедиться, что вы нажимаете кнопки обновлять таблицы. IDEA будет загружать таблицы и использовать их для проверки. Затем вам необходимо установить этот источник данных в фасетку JPA.
Ответ 3
Есть несколько вещей, которые вам нужно сделать. Сначала настройте фасет Hibernate в вашей конфигурации структуры проекта. Вы можете выбрать конфигурационный файл Hibernate в этот момент или создать новый. Затем вы должны настроить источники данных в окне базы данных (View- > Tools Window- > Database). Не забудьте установить диалоги базы данных на вкладке "Консоль" в окне базы данных. Наконец, вам нужно перейти в окно Persistence (View- > Tools Window- > Persistence) и добавить источник данных в соответствующий грань. Просто щелкните правой кнопкой мыши значок справа в дереве и выберите "Добавить источник данных". В столбце "Источник данных" есть раскрывающееся меню, содержащее все настроенные вами источники данных. Затем IntelliJ правильно идентифицирует таблицы.
Одно слово предупреждения. Начиная с версии 12.04, IntelliJ не изменяет ваш конфигурационный файл Hibernate. Вам все равно нужно сопоставить свои классы и вручную добавить данные своей базы данных.
Ответ 4
В дополнение к настройке источника данных, как и другие, упомянутые выше, чтобы очистить эти ложные ошибки, на панели "База данных" мне пришлось перейти к настройкам, вкладкам "Схемы и таблицы" и нажать на флажок слева от "information_schema", таблицы для моей базы данных.
Ответ 5
Убедитесь, что вы импортируете javax.persistence.Table
и javax.persistence.Column
в классы сущностей.
Итак, в верхней части каждого класса проверьте:
import javax.persistence.Table;
import javax.persistence.Column;
Это будет импортировать соответствующие аннотации JPA в ваш класс.
Ответ 6
Я правильно установил источник данных, но имена столбцов не были показаны. После того, как я изменил схему и каталог, как показано ниже, все было правильно распознано.
@Entity
@Table(name = "stock_detail", schema = "testing", catalog = "")
public class Xyz {
// ...
Ответ 7
Для JPA не удается разрешить таблицу/столбец. Если все работает, и вы просто раздражены красной меткой ошибки, вы можете изменить настройки проверки с Ошибка на Предупреждение: -
File --> Settings --> Inspections --> JPA issues --> Unresolved database references in annotations
.