【问题标题】:Unable to autodiscover JPA2 entities无法自动发现 JPA2 实体
【发布时间】:2014-11-25 02:53:57
【问题描述】:

我有一个 maven 项目,一个独立的 JPA 工具。

这个主项目依赖于另一个包含所有实体类的 maven 项目。

但是,JPA 似乎不会自动找到我的实体。我的 Eclipse 项目 > 属性 > jpa > 自动发现也已启用。

我的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="myapp-ds" transaction-type="RESOURCE_LOCAL">        
        <description>Vecchio</description>
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myapp" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="xxx" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.show_sql" value="true" />            
            <property name="hibernate.archive.autodetection" value="class"/>
        </properties>

    </persistence-unit>

</persistence>

它位于 target/classes/META-INF。

使用实体时的错误是:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: model.legacy.dto.myentity
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1184)
    at it.test.Main.main(Main.java:23)

【问题讨论】:

    标签: java hibernate maven jakarta-ee jpa


    【解决方案1】:

    您尝试阅读here。 否则,如果自动检测不起作用,您可以在persistence.xml 中手动插入实体:

        <persistence-unit ...>
            <class>...</class>
      </persistence>
    

    【讨论】:

    • 我不想列出我所有的课程,他们是 400+
    【解决方案2】:

    如果您使用独立项目,则只有主 jar 中包含的类会被持久化单元自动扫描。其他 jar 不会像战争那样包含在存档中,但会根据需要在类路径中搜索 => 默认情况下不扫描包含在其他项目创建的 jar 中的实体类。

    您可以使用&lt;jar-file&gt;full jar location&lt;/jar-file&gt;,但除非您设法将所有 jar 打包在同一个目录中,否则它将是高度不可移植的,但即便如此,它也只是安装的约定。这就是为什么许多文档(如 Hibernate Entity Manager 指南)建议在 JSE 环境中明确列出当前 jar 之外的所有实体类的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2013-01-03
      • 2011-11-23
      相关资源
      最近更新 更多