Hibernate-JPA без сопоставления классов XML

В настоящее время я изучаю Hibernate и JPA, и я только что наткнулся на следующую проблему:

У меня есть класс сущности под названием User, и этот класс аннотирован аннотацией @Entity (JPA). В моем файле persistence.xml есть сопоставление НЕТ, но я могу без проблем использовать его в своем EntityManager.

Я только что создал еще один объект под названием Comment (некоторые пакеты ниже), он также аннотирован @Entity и также является НЕТ в моем файле persistence.xml. Однако это вызывает исключение org.hibernate.MappingException: Unknown entity при использовании в EntityManager.

Мой файл persistence.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.1"
             xmlns = "http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/persistence
  http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name = "net.notfab.hibernatetest" transaction-type = "RESOURCE_LOCAL">
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <!-- JPA Properties -->
            <property name = "javax.persistence.provider" value = "org.hibernate.jpa.HibernatePersistenceProvider"/>
            <property name = "javax.persistence.jdbc.driver" value = "org.mariadb.jdbc.Driver"/>
            <property name = "javax.persistence.jdbc.url"
                      value = "jdbc:mariadb://IP:PORT...."/>
            <property name = "javax.persistence.jdbc.user" value = ""/>
            <property name = "javax.persistence.jdbc.password" value = ""/>

            <!-- Hibernate Properties -->
            <property name = "hibernate.connection.provider_class"
                      value = "org.hibernate.hikaricp.internal.HikariCPConnectionProvider"/>
            <property name = "hibernate.dialect" value = "org.hibernate.dialect.MariaDBDialect"/>
            <property name = "hibernate.connection.CharSet" value = "utf8mb4_bin"/>
            <property name = "hibernate.connection.characterEncoding" value = "utf8mb4_bin"/>
            <property name = "hibernate.connection.useUnicode" value = "true"/>
            <property name = "hibernate.hbm2ddl.auto" value = "validate" />
            <property name = "hibernate.archive.autodetection" value = "class, hbm" />

            <!-- Hikari Properties -->
            <property name = "hibernate.hikari.minimumIdle" value = "5"/>
            <property name = "hibernate.hikari.maximumPoolSize" value = "10"/>
            <property name = "hibernate.hikari.idleTimeout" value = "15000"/>
            <property name = "hibernate.hikari.leakDetectionThreshold" value = "30000"/> <!-- 30 Seconds -->
            <property name = "hibernate.hikari.poolName" value = "TestPool"/>
        </properties>
    </persistence-unit>
</persistence>

Что может быть причиной такого странного поведения?

Есть ли у меня способ продолжить использование аннотированных классов, не объявляя их в XML-файле? (Уже 2018 год - аннотации намного лучше!).

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

Обновлено: в соответствии с комментариями, вот полная трассировка стека https://hastebin.com/haguniheca.cs (а также здесь https://hasteb.in/ipuzojoc.cs на случай, если hastebin снова упадет).

В этом сценарии я не использую Spring.

Изменить 2: Здесь - моя сущность.

Изменить 3: это проект gradle, работающий из автономного (затененного) файла jar на Java SE, в настоящее время использующий следующий список зависимостей для сохранения (среди прочего):

compile group: 'org.hibernate', name: 'hibernate-hikaricp', version: '5.3.3.Final'
compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.2.6'

Изменить 4: в соответствии с комментарием Евгения я провел некоторое тестирование, и причиной проблемы, похоже, является IntelliJ. Проблема устранена путем запуска затененного файла jar из командной строки. (Может быть, путь к классам отличается при запуске отладки приложения?). Тогда возникает вопрос: «Как я могу исправить конфигурацию запуска IntelliJ для моего приложения?».

Можете ли вы опубликовать трассировку стека ошибок? Также исходный код объекта ..

user10639668 10.12.2018 22:39

@Spara Куда делись эти варианты? По свойствам? Под единицей настойчивости? Кстати, имейте в виду, что я не использую Spring в этом сценарии (я заметил, что Spring имеет режим «на основе аннотаций»).

Fabricio20 10.12.2018 22:40

@Spara OP не использует Spring.

user10639668 10.12.2018 22:40

Выложите, пожалуйста, исходный код Comments.

user10639668 10.12.2018 22:46

Отредактировано с использованием исходного кода объекта и трассировки стека. Простите меня за брань на ломбоке.

Fabricio20 10.12.2018 22:46

Это проект Maven?

user10639668 10.12.2018 22:47

Отредактировано еще раз со спецификациями о проекте и его стадии сборки.

Fabricio20 10.12.2018 22:52

Альтернативными вариантами являются использование сопоставления XML и сопоставления на основе аннотаций, поэтому, если он у вас есть, второй не нужен.

Antoniossss 10.12.2018 22:52

Вы уверены, что net.notfab.hibernatetest.entities нет в тестовой зоне?

user10639668 10.12.2018 22:54

Да, в настоящее время у меня нет тестов для этого проекта (папка с тестами пуста). После закрашивания jar файлы правильно перемещаются в корневую -> сетевую папку, а файл persistence.xml перемещается в папку META-INF.

Fabricio20 10.12.2018 22:56

Как вы ведете свой проект?

user10639668 10.12.2018 22:57

В настоящее время работает функция отладки (приложение) IntelliJ. Определен путь к классам для модуля _main (Hibernatetest_main).

Fabricio20 10.12.2018 23:00

Странно, попробуйте запустить исполняемый jar с java -jar ....

user10639668 10.12.2018 23:03

@EugenCovaci Странно, похоже, что запуск напрямую из командной строки вызвал исключение SchemaManagementException при запуске для одного из моих других объектов (который не генерировался при запуске из IntelliJ). Я собираюсь исправить это и посмотреть, сохраняется ли проблема за пределами IntelliJ, а затем правильно обновлю вопрос.

Fabricio20 10.12.2018 23:08

Как вы на самом деле знаете, что можете использовать эту сущность? Пожалуйста, включите тестовый код (даже самый тупой и простой)

Antoniossss 10.12.2018 23:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
15
212
0

Другие вопросы по теме