gpt4 book ai didi

java - 未知实体bean类,请验证该类是否已使用@Entity注解进行标记

转载 作者:行者123 更新时间:2023-12-01 12:51:53 25 4
gpt4 key购买 nike

我正在为我的大学的一个研究项目构建一个应用程序,该应用程序使用 Eclipse 和 eclipselink JPA 用 Ja​​va 开发以实现持久性。该应用程序由 3 个 Eclipse 项目组成,为简单起见,将它们称为 A、B 和 C。项目 A 和 C 使用 JPA 访问其数据库 DB_A 和 DB_C。项目A使用内置的Java derby数据库,项目C使用MySQL数据库。项目 A 和 C 都定义了一些实体和实体管理器。在每个项目中进行测试时,操作运行良好。然后,将项目 C 添加为项目 B 的引用,将项目 B 添加为项目 A 的引用。(A->B->C)项目 A(主应用程序)使用本地数据库 DB_A,需要访问项目 B 的功能,项目 B 调用连接到第二个数据库 DB_C 的项目 C。此时会发生以下异常,从项目 C 抛出(之前运行良好):

线程“Thread-0”中的异常 java.lang.IllegalArgumentException:未知实体bean类:类database.model.VMModelSim,请验证这一点类已使用 @Entity 注释进行标记。

   at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:707)

at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:588)

at database.dao.DAO.find(DAO.java:40)

at database.facade.FacadeImpl.find(FacadeImpl.java:32)

at simulationmanager.services.VMServiceImpl.getById(VMServiceImpl.java:89)

at simulationmanager.services.VMServiceImpl.getById(VMServiceImpl.java:1)

at monitoring.util.ResourceAdapter.updateResource(ResourceAdapter.java:29)

at monitoring.QueueProcessor.writeMessageToDB(QueueProcessor.java:58)

at monitoring.QueueProcessor.run(QueueProcessor.java:44)

每个项目 A 和 C 都有自己的 persistance.xml 文件,区别在于持久化单元名称、声明的类和数据库驱动程序。

这是项目A的持久化xml文件。

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="todos" transaction-type="RESOURCE_LOCAL">
<class>database.model.Server</class>
<class>database.model.VirtualMachine</class>
<class>database.model.CPU</class>
<class>database.model.CPUCore</class>
<class>database.model.HDD</class>
<class>database.model.RAM</class>
<class>database.model.DataCenter</class>
<class>database.model.Rack</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:derby:/var/lib/one/workspace/databases/cloudDatabase;create=true" />
<property name="javax.persistence.jdbc.user" value="test" />
<property name="javax.persistence.jdbc.password" value="test" />

<!-- EclipseLink should create the database schema automatically -->
< <property name="eclipselink.ddl-generation" value="create-or-extend-tables" /> >
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
</properties>

</persistence-unit>
</persistence>

我可以做什么来解决这个问题?该实体用@Entity 标记。如果仅访问一个数据库,则操作可以正常工作。我认为出现这个问题是因为必须同时访问两个数据库。我们可以以某种方式修改 persistance.xml 文件吗?

最佳答案

我们设法解决了问题。在项目 A 和 C 中,我们在相同的包名称中具有相同的数据库访问类:包 database.connection 中的 DBConnect.java。在这里,我们定义了持久性管理器名称(这是不同的!)。当项目单独运行时,每个项目访问自己的连接类。但是,当仅运行项目 A 并且它引用 B,然后引用 C 时,项目 C 中创建与其数据库的连接的类创建了一个具有项目 A 中定义的类的对象(因为名称相同)。因此,它试图为项目 A 中定义的模型创建持久性管理器,并编写项目 C 中定义的对象。我相信这就是错误源。

关于java - 未知实体bean类,请验证该类是否已使用@Entity注解进行标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168204/

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