无法自动发现JPA2实体

时间:2014-09-30 12:59:11

标签: java hibernate maven java-ee jpa

我有一个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)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您尝试阅读here。 否则,如果自动检测不起作用,您可以在persistence.xml

中手动插入实体
    <persistence-unit ...>
        <class>...</class>
  </persistence>