2013-04-24 29 views
1

目前我正在一個小項目,涉及GAE使用JDO,但我似乎有問題持續更新的數據 - 奇怪的是它在本地工作,但不是部署的應用程序版本。 更新是非常簡單的:GAE持續的價值沒有更新部署的應用程序,但本地

update(Foo newBar) { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    Transaction trans = pm.currentTransaction(); 
    trans.begin(); 
    Foo bar = pm.getObjectById(Foo.class, "someId"); 
    bar.baz = newBar.baz; 
    pm.makePersistent(bar); 
    trans.commit(); 
    pm.close(); 
} 

有什麼我錯過這裏?

+0

它是如何不起作用呢? – dragonx 2013-04-24 23:09:19

+0

第一次'酒吧'是持續的,但它的價值,保持不變,每次連續的呼叫。 但是在本地執行,'bar'會在每次調用時更新並保持正確。 – hanneswurstes 2013-04-25 05:56:23

回答

2

直接更新公共字段?噢親愛的。沒有持久性機制有希望知道你更新了該領域,如果你這樣做。使用setter,或者像@PersistenceAware一樣增強更新類。

日誌的檢查就會發現很多東西,喜歡makePersistent這個這一呼籲是沒有價值

+0

檢查日誌沒有透露任何問題,因爲我說它在本地工作,並且該對象被標記爲骯髒,並且makePersistent調用按預期工作。 但是使用setter取得了訣竅。非常感謝!!我應該瞭解DataNucleus的持久性機制如何工作...... 只是出於好奇,你有什麼想法還有什麼可能是本地和部署行爲之間存在差異的原因? – hanneswurstes 2013-04-25 16:55:37

相關問題