2010-09-21 56 views
1

奇怪的東西......我很高興地使用EclipseLink/JPA 2作爲持久性單元的提供者(在後面有一個MySQL RDBMS)。我關閉了DDL-drop/create,因爲我想將記錄保存在數據庫中,並且無論如何都沒有對實體進行任何更改。Eclipselink生活在過去,DDL沒有反映實體

現在我對一個實體做了一些更大的改變(添加了一些屬性,重命名/重新輸入其他屬性,將以前嵌入的對象導入到此實體中,等等)。我打開DDL-drop/create,重新部署幾次,...沒有任何變化!

EclipseLink實際上基於信息創建(並重新創建)SQL表!這就像它有一個Java類的副本,並忽略了我剛剛更新的那個...

更瘋狂,先前嵌入的對象已經消失。我刪除了類文件。 Eclipselink 仍然在先前嵌入類的表中創建屬性。

我在GlassFish server.log中看不到例外情況。我放棄並重新創建了持久性單元,沒有改變。有任何想法嗎? (讓我知道如果我應該張貼任何代碼/日誌條目,我會更新這個帖子。)

更新:設置eclipselink.logging.levelFINEST後,我仍然看到沒有例外。創建DDL腳本(在其中有錯誤的列)並愉快地在DB上執行(當然創建了錯誤的列)。在日誌中我看到的EclipseLink談論是不存在了的字段:

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;| 
The alias name for the entity class [class mvs.entity.Shopper] is being defaulted to: Shopper.|#] 

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;| 
The column name for element [field msisdn] is being defaulted to: MSISDN.|#] 

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;| 
The column name for element [field imei] is being defaulted to: IMEI.|#] 

在這種情況下mvs.entity.Shopper是類。 msisdn是一個現有的字段,但imei不再存在。不知道EclipseLink從哪裏獲取信息...

順便說一句,我有eclipselink.weaving設置爲false,因爲它導致延遲加載的問題。這可能是相關的嗎?

更新2:按照戈登的建議,我查找了實體的舊副本,但找不到任何。在新鮮的GlassFish上部署應用程序而不是顯示上面的行爲;而是正確地完成了的映射和DDL創建一樣! Yippie :)

我唯一的結論是,舊的副本必須保留在GlassFish的某個地方,即使在取消部署之後......這有道理嗎?

+0

您可以啓用Eclipselink日誌記錄到文件並將日誌記錄級別設置爲調試。然後啓動你的應用程序,看看你得到關於DDL的消息。 – Pace 2010-09-22 14:39:52

+0

@Pace:thx您的迴應。我已更新該帖子。任何其他想法? – Hank 2010-09-22 15:26:28

+0

您應該發佈最新的更新作爲答案並接受它。 – 2010-09-23 00:37:16

回答

0

安裝GlassFish的全新副本並將應用程序部署到其中,解決了問題。比較GF的兩個副本後,我在glassfish/domains/domain1/lib中發現了一箇舊的構建工件,其中包含舊的實體定義。消除後,一切都如預期。

所以在一天結束時,我自己的愚蠢的錯誤。

1

要麼在類路徑中有舊映射或正在部署舊版本類的orm.xml文件。 EclipseLink無法在部署之間「存儲」類。嘗試反編譯部署中的類文件以查看它是否有更改。

+0

謝謝。我反編譯NetBeans構建的工件,這很好。在任何地方都找不到orm.xml文件。但我設法通過安裝glassfish 3.0.1的新副本來解決它,請參閱更新。 – Hank 2010-09-22 21:01:53