Подтвердить что ты не робот

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?

4b9b3361

Ответ 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.