2013-05-13 31 views
-1

在一個JSF 2.1 - Spring 3.1集成項目中。我嘗試使用eclipselink 2.3.2,Glassfish 3.1.2和Maven在我的項目上處理事務容器。在Netbeans IDE 7.2上工作。Eclipselink -Glassfish項目對象不是已知的實體類型錯誤

在服務層我通過下面的代碼注入實體管理器,並在調試它似乎確定。

@Inject 
public void setEntityManager() { 
EntityManagerFactory emfactory =Persistence.createEntityManagerFactory 
("E_DefterManagementPU"); 
    this.em = emfactory.createEntityManager(); 

但之後,我充滿命名實體EfaFunctions,並嘗試與

em.persist(EfaFunctions); 

它給這個錯誤繼續存在

java.lang.IllegalArgumentException: Object: [email protected] 
is not a known entity type. 

但在** **的persistence.xml我有以下節點

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<jta-data-source>EFA</jta-data-source> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 

我的實體項目位置是com.edefter.entity.EfaFunctions;而不是錯誤指定的位置。實際上,有一個答案是由Pascal in this link 寫的,但我的生成策略是none,我的實體是由netbeans生成的。需要一些專家的意見。由於提前

我刪除了

@Table(name="EFA_FUNCTIONS") 

註釋從實體的頂部,但@Entity仍然停留。 該錯誤是走了,但隨後的查詢開始爲

INSERT INTO EFAFUNCTIONS 

,沒有下劃線,但我需要

INSERT INTO EFA_FUNCTIONS 

,becouse它的數據並沒有插入。爲什麼eclipselink給@Table註釋帶來錯誤,儘管沒有像EFAFUNCTIONS這樣的表爲什麼沒有給出任何錯誤

回答

2

我解決了這個問題,正如我提到的問題,我已經通過Netbeans從數據庫生成實體,所以我沒有懷疑是實體格式。我曾在Hibernate之前以ORM和Hibernate加DB2或MYSQL的方式工作過。這些組合沒有給出相同用法的錯誤。但是用組合Eclipselink - Oracle DB @Entity註釋必須是如下所示的參數

@Entity(name="entityName")

@Table(name="TableName")

感謝您的評論。

0

爲什麼你會嘗試堅持一個EntityManager?更好地通過(到em.persist)一個實體(其中一個類標記爲@Entity)

+0

對不起,我已經給它一個實體作爲參數;我更新了它 – Malcolmxappa 2013-05-13 15:03:58

+0

包含你當前的錯誤。 – James 2013-05-13 15:38:13

+0

@James我在下面的代碼中給出了EntityManager對象而不是EfaFunctions。謝謝你的興趣我想我解決了問題 em.persist(EfaFunctions); – Malcolmxappa 2013-05-13 17:42:55

0

我有一個類似的問題,試圖通過對EntityManager的調用persist()堅持實體類的一個對象時: 

java.lang.IllegalArgumentException異常:對象:entities.Documents [ID = NULL]不是已知的實體類型。

原來,在該行

<persistence-unit name="my-pu" transaction-type="RESOURCE_LOCAL"> 

是從Java代碼中聲明實體管理器工廠時,我使用的名稱不同勢在persistence.xml中聲明的持久化單元的名稱:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("my-persistenceunit"); 

兩個名字修正以同一個名字,叫persist()後都按預期。

相關問題