没有XML类映射的Hibernate-JPA

时间:2018-12-10 21:36:15

标签: java hibernate jpa

我目前正在学习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的运行配置?”。

0 个答案:

没有答案