我正在爲我的大學開發一個研究項目的應用程序,該應用程序是使用Eclipse和eclipselink JPA在Java中開發的,用於存儲持久性。該應用程序由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的功能,調用連接到第二個數據庫DB_C的項目C.這是當出現以下異常,從項目Ç拋出(在此之前能正常工作):未知的實體bean類,請驗證此類是否已使用@Entity註釋標記
異常在線程「線程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中分離出來。 – Chris