В настоящее время я изучаю 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.
Edit 2: Здесь - это моя сущность.
Редактировать 3: Это простой проект, выполняющийся из автономного (затененного) файла 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 для моего приложения?».