我目前正在学习Hibernate和JPA,而我偶然发现了以下问题:
我有一个称为User的实体类,并且该类用@Entity
(JPA)注释进行了注释。我的persistence.xml
文件没有没有映射,但是我可以在EntityManager上使用它而没有问题。
我刚刚创建了另一个实体,称为Comment(下面的一些软件包),该实体也用@Entity
进行了注释,并且在我的persistence.xml
文件中也不。但是,在EntityManager上使用时,会抛出org.hibernate.MappingException: Unknown entity
异常。
我的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年-注释要好得多!)。
注意:This question与之类似,但是它们的最终目标最终是在XML上进行映射,我想尽一切办法避免这种情况。我也在寻找对上述行为的解释。
编辑:根据评论的要求,这里是完整的堆栈跟踪https://hastebin.com/haguniheca.cs(以及这里的https://hasteb.in/ipuzojoc.cs,以防hastebin再次掉线)。
在这种情况下,我不使用Spring。
编辑2:Here是我的实体。
编辑3:这是一个gradle项目,在Java SE上的一个独立(阴影)jar文件上运行,当前使用以下依赖性列表进行持久化(以及其他):
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:根据Eugen的评论,我做了一些测试,问题的原因似乎是IntelliJ。通过从命令行单独运行带阴影的jar文件,此问题已解决。 (也许在运行应用程序调试时,类路径是否不同?)。然后问题变成“如何为我的应用程序修复IntelliJ的运行配置?”。