奇怪的東西......我很高興地使用EclipseLink/JPA 2作爲持久性單元的提供者(在後面有一個MySQL RDBMS)。我關閉了DDL-drop/create,因爲我想將記錄保存在數據庫中,並且無論如何都沒有對實體進行任何更改。Eclipselink生活在過去,DDL沒有反映實體
現在我對一個實體做了一些更大的改變(添加了一些屬性,重命名/重新輸入其他屬性,將以前嵌入的對象導入到此實體中,等等)。我打開DDL-drop/create,重新部署幾次,...沒有任何變化!
EclipseLink實際上基於舊信息創建(並重新創建)SQL表!這就像它有一個Java類的副本,並忽略了我剛剛更新的那個...
更瘋狂,先前嵌入的對象已經消失。我刪除了類文件。 Eclipselink 仍然在先前嵌入類的表中創建屬性。
我在GlassFish server.log中看不到例外情況。我放棄並重新創建了持久性單元,沒有改變。有任何想法嗎? (讓我知道如果我應該張貼任何代碼/日誌條目,我會更新這個帖子。)
更新:設置eclipselink.logging.level
到FINEST
後,我仍然看到沒有例外。創建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的某個地方,即使在取消部署之後......這有道理嗎?
您可以啓用Eclipselink日誌記錄到文件並將日誌記錄級別設置爲調試。然後啓動你的應用程序,看看你得到關於DDL的消息。 – Pace 2010-09-22 14:39:52
@Pace:thx您的迴應。我已更新該帖子。任何其他想法? – Hank 2010-09-22 15:26:28
您應該發佈最新的更新作爲答案並接受它。 – 2010-09-23 00:37:16