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