我有一个 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)
最佳答案
如果您使用独立项目,则持久单元只会自动扫描主 jar 中包含的类。其他 jar 不会像 war 那样包含在存档中,但会根据需要在类路径中搜索 => 默认情况下不会扫描其他项目创建的 jar 中包含的实体类。
您可以使用<jar-file>full jar location</jar-file>
,但除非您设法将所有 jar 打包在同一目录中,否则它将是高度不可移植的,但即使如此,它也只是安装的约定。这就是为什么许多文档(例如 Hibernate Entity Manager 指南)建议在 JSE 环境中显式列出当前 jar 之外的所有实体类。
关于java - 无法自动发现 JPA2 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121496/