来自Maven的Bean中的UnknownEntityTypeException
我一直在尝试重构一个java项目,将子模块转移到部署到我们内部maven存储库(archiva)的单独项目中。
子模块的类如下:
org.example.srv.DomainUser
org.example.srv.DomainUserBean //entity manager
org.example.srv.UserGroup
org.example.srv.UserGroupBean //entity manager
当源文件被复制到主后端服务器项目内相应的包文件夹中,但当我们从后端服务器项目中删除源文件并将相同的代码作为Maven依赖项时,它会正常工作,我得到以下错误在尝试访问数据库时:
org.hibernate.UnknownEntityTypeException: Unable to locate persister: org.example.srv.DomainUser
后端服务器项目的持久性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="loginserver">
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
</properties>
</persistence-unit>
</persistence>
我只能想象,当项目是分开的时候,这与bean发现有关,但是我感到非常困惑,并且将这些项目以最小的配置开销分开将是非常好的。
主服务器项目pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example.srv</groupId>
<artifactId>loginserver</artifactId>
<version>0.0.2-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>authobjects</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>loginserver</finalName>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
</project>
Auth对象pom.xml(该项目还包含类的ORM代码,包括JPQL语句构建器等):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<pj.gid>org.example</pj.gid>
<pj.aid>authobjects</pj.aid>
<pj.ver>1.0.2-SNAPSHOT</pj.ver>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<groupId>${pj.gid}</groupId>
<artifactId>${pj.aid}</artifactId>
<version>${pj.ver}</version>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ent.tnp.utils</groupId>
<artifactId>genericentityejb</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-2</version>
</extension>
</extensions>
</build>
<distributionManagement>
<repository>
<id>internal</id>
<url>http://archiva.tnp.in/repository/internal/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://archiva.tnp.in/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>internal</id>
<name>Archiva Managed Internal Repository</name>
<url>http://archiva.tnp.in/repository/internal/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>Archiva Managed Snapshot Repository</name>
<url>http://archiva.tnp.in/repository/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>internal</id>
<name>Archiva Managed Internal Repository</name>
<url>http://archiva.tnp.in/repository/internal/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<name>Archiva Managed Snapshot Repository</name>
<url>http://archiva.tnp.in/repository/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
说明:genericentityejb是一个抽象类,用于组成JPQL查询并管理JPA实体的数据库查询。 authobjects项目为其中包含的每个实体扩展一次,以便为每个实体提供持久性。
从我看到的至少有4个模块涉及:
org.example.srv:loginserver:0.0.2-SNAPSHOT
org.example:authobjects:1.0.0
org.example:authobjects:1.0.2-SNAPSHOT
ent.tnp.utils:genericentityejb:1.0.0
我注意到一些可能的重要性:
loginserver
不依赖于authobjects
,而是依赖于genericentityejb
(它们是两个不相关的示例项目吗?)。 loginserver
不依赖于authobjects:1.0.2-SNAPSHOT
,但在authobjects:1.0.0
loginserver
没有声明任何存储库(既不是父POM),所以genericentityejb
总是从您的本地机器存储库中解析,除非您在全局settings.xml
声明存储库(没关系)。 authobjects
项目groupId,artifactId和版本使用属性是一个好主意。 也许它不相关,但我会避免这样的声明。 话虽如此,我为我的项目使用了一个类似的结构,部署到Wildfly 10.1,Hibernate正确地发现了所有依赖关系中的所有实体。
所以我会尝试一个干净的回合。 我会忽略authobjects
因为它没有被引用,我想所需的实体类位于genericentityejb
:
genericentityejb
POM版本修改为1.0.1-SNAPSHOT
genericentityejb
文件夹中: mvn clean install
authobjects
POM版本到1.0.3-SNAPSHOT
和依赖genericentityejb
到1.0.1-SNAPSHOT
authobjects
文件夹: mvn clean install
loginserver
依赖关系authobjects
到0.0.3-SNAPSHOT
和依赖关系authobjects
到1.0.3-SNAPSHOT
loginserver
文件夹: mvn dependency:analyze
检查使用未声明的genericentityejb
(也许是genericentityejb
?) loginserver
文件夹中: mvn clean package
loginserver/target/loginserver-0.0.3-SNAPSHOT.war!/WEB-INF/lib/genericentityejb-1.0.3-SNAPSHOT.jar
和loginserver/target/loginserver-0.0.3-SNAPSHOT.war!/WEB-INF/lib/authobjects-0.0.3-SNAPSHOT.jar
存在并包含所有实体类。 此外,查看loginserver
有效的POM也可能很有用
在pom.xml
或settings.xml
声明存储库是个人选择。 两种方法都有优点和缺点:
copy'n'paste存储库
编辑回购网址
当你释放神器时:
您可以将<jar-file>
元素(包含具有实体分类的jar
路径)添加到persistence.xml
或使用<class>
元素描述所有实体类。
另外,您可以使用一些软件包扫描方法以编程方式添加实体类。 我在这里收集了有用的链接和库文件:
https://github.com/v-ladynev/hibernate-scanners-test
链接地址: http://www.djcxy.com/p/95255.html上一篇: UnknownEntityTypeException in Bean from Maven
下一篇: RxJava2 debounce function not working properly in RecyclerView