2011-02-23 40 views
8

我正在使用Netbean6.9.1和JPA EclipseLink構建REST Web應用程序。即使實體標有@Entity註釋,但未知實體類錯誤消息

我面對的是,即使我的實體類MasatoTable標有實體標註的問題,我得到錯誤:

(java.lang.IllegalArgumentException: Unknown entity bean class: 
    class entity.MasatoTable, please verify that this class 
has been marked with the @Entity annotation.) 

事情是當我重新從NetbeanIDE的GlassFish3服務器,它適用於過了一段時間,某種程度上,錯誤開始顯現。我曾經使用過Toplink Essential,沒有問題,但我已經更改爲EclipseLink並重新defiend persistence.xml(如下所示),並且此問題已啓動。但我不知道我能想到的任何代碼錯誤..

MasatoTable.java

@Entity 
@Table(name = "MasatoTable") 
public class MasatoTable implements Serializable { 
...continue code... 

的persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/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"> 
    <persistence-unit name="kojoPU"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <non-jta-data-source>jdbc/koga_kojo</non-jta-data-source> 
    <class>entity.MasatoTable</class> 
    <properties> 
     <property name="eclipselink.logging.logger" value="JavaLogger"/> 
     <property name="eclipselink.logging.level.sql" value="FINEST"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://KOGADBSERVER;databaseName=MasatoDB"/> 
     <property name="javax.persistence.jdbc.password" value="foobar"/> 
     <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> 
     <property name="javax.persistence.jdbc.user" value="koga"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

貌似同樣的問題,但票的解決方案是從Eclipselink回滾到Toplink。有沒有人解決這個問題,而不回滾到toplink?

Unknown entity bean class after hot deploy: netbeans 6.9 + glassfish 2.1 + eclipselink jpa 2.0

UPDATE

至於我的研究去在這種情況下,你看像這個bug已經被解決,並定了嗎?

https://bugs.eclipse.org/bugs/show_bug.cgi?id=288141

我沒有足夠的知識來了解整個事情,但也有一些事實,我發現:

Netbean6.9.1提供的EclipseLink 2.0.1,而最新的版本是2.2.0

我下載了最新版本,並將它們放到lib目錄然後重新部署但沒有運氣,問題仍然存在。不知道我是否以錯誤的方式做事。後

UPDATE詹姆斯的評論

下面是我用它來創建單身的EntityManagerFactory類以及它是如何被使用。

package common; 

import java.util.Date; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 

public class EmProvider { 

    private static final String DB_PU = "kojoPU"; //工場DB 

    public static final boolean DEBUG = false; 

    private static final EmProvider singleton = new EmProvider(); 

    private EntityManagerFactory emf; 

    private EmProvider() {} 

    public static EmProvider getInstance() { 
     return singleton; 
    } 


    public EntityManagerFactory getEntityManagerFactory() { 
     if(emf == null) { 
      emf = Persistence.createEntityManagerFactory(DB_PU); 
     } 
     if(DEBUG) { 
      System.out.println("factory created on: " + new Date()); 
     } 
     return emf; 
    } 

    public void closeEmf() { 
     if(emf.isOpen() || emf != null) { 
      emf.close(); 
     } 
     emf = null; 
     if(DEBUG) { 
      System.out.println("EMF closed at: " + new Date()); 
     } 
    } 

}//end class 

如何使用它:

EntityManager em = null; 
    Object out = null; 
    try { 
     em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager(); 
     Query query = em.createNativeQuery(sql); 

     ....some code here 
    } 
    finally { 
     if(em != null) { 
      em.close(); 
     } 
    } 

通過看我的代碼,我想...... 我不打烊的EntityManagerFactory(我在關閉的EntityManager終於雖然)

我還發現主題中的"unknown entity bean class"錯誤肯定會顯示以下操作。通過Netbean

  1. 部署Web應用程序(這將打開瀏覽器)

  2. 改變一些代碼Netbean IDE和保存。然後,只要按下保存按鈕,Netbean就會自動重新部署(這稱爲「熱部署」???)

  3. 回到瀏覽器並採取一些操作,如添加一些涉及EntityManager的數據。

看起來像是發生錯誤,因爲我沒有在熱部署時關閉實體管理器工廠?我必須進行調查。

+0

但我不應該關閉EntityManagerFactory實例,因爲它是單例。我應該只關閉它,並在熱部署期間創建新的實例..?越來越困惑 – 2011-03-03 02:02:19

回答

6

你是如何創建你的EntityManager /工廠,是管理還是非管理?

如果它沒有被管理,那麼我相信EclipseLink將不會以重新部署的方式被通知,所以仍舊會緩存舊的EntityManagerFactory,因爲它永遠不會關閉。你能確保在熱部署之後關閉EntityManagerFactory嗎?

您可以使持久性單元成爲可以解決問題的託管持久性單元。

無論哪種方式,請在EclipseLink和Glassfish中詳細記錄一個錯誤,因爲應該跟蹤這個問題。

我想這可能是錯誤,https://bugs.eclipse.org/bugs/show_bug.cgi?id=326552

請投票支持這個bug,並且包括在它的信息。

+0

我已經在我的問題區發佈了一些更新,請看看回應;) – 2011-03-03 02:01:26

2

如果不需要2.0,則解決方案here將使用JPA 1.0。

+0

是的,我鏈接已在問題中的網址..我正在尋找答案,如果有任何修復或任何工作,除非回滾到Toplink是JPA 1.0 – 2011-02-25 08:31:56

+0

我已經搜索了很多,但仍然找不到任何好的信息。 – 2011-02-25 08:32:12

+0

不幸的是我同意,它看起來像問題與netbeans,glassfish,eclipselink,JPA2和Toplink的組合。 – 2011-02-25 08:46:07

-1

今天,我面臨着同樣的proble,但我糾正persistence.xml中

  1. 請實體類名稱和包檢查persistence.xml中正確定義。
+0

你可以發佈一些樣品? – 2011-02-28 10:06:37

相關問題