gpt4 book ai didi

hibernate - 来自 Maven 的 Bean 中的 UnknownEntityTypeException

转载 作者:行者123 更新时间:2023-12-03 08:16:57 25 4
gpt4 key购买 nike

我一直在尝试重构一个 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 Objects 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和依赖 genericentityejb1.0.1-SNAPSHOT
  • 来自 authobjects文件夹:mvn clean install
  • 修改loginserver依赖 authobjects0.0.3-SNAPSHOT和依赖 authobjects1.0.3-SNAPSHOT
  • 来自 loginserver文件夹:mvn dependency:analyze检查使用过的未声明的 deps(可能是 genericentityejb ?)
  • 来自 loginserver文件夹:mvn clean package
  • 检查是否 loginserver/target/loginserver-0.0.3-SNAPSHOT.war!/WEB-INF/lib/genericentityejb-1.0.3-SNAPSHOT.jarloginserver/target/loginserver-0.0.3-SNAPSHOT.war!/WEB-INF/lib/authobjects-0.0.3-SNAPSHOT.jar存在并包含所有实体类。

  • 查看 loginserver 也很有用。 effective POM

    pom.xml 中声明存储库或 settings.xml是个人选择。两种方法各有利弊:
  • 复制'n'粘贴存储库
  • pom:对于每个新项目
  • 设置:对于每台新机器(开发人员、CI 环境...)
  • 编辑 repo URL
  • pom:对于每个项目
  • 设置:每台机器
  • 当您发布 Artifact 时:
  • pom: repo refes 是刻在该版本的石头上的
  • 设置:该版本中使用的 repo 引用未保存
  • 关于hibernate - 来自 Maven 的 Bean 中的 UnknownEntityTypeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42477690/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com