2010-07-20 42 views
4

我有一套需要重構的包中的JDO持久性能力類。在Google App Engine中包含JDO @PersistenceCapable類的重構包

我知道如果您更改類名稱,那麼您需要更新「BigTables」對象。但是,如果我更改Java對象所屬的包,這是否意味着「BigTables」中的數據對象需要以某種方式更新?

即com.example.test.Person - > com.example.blah.Person

回答

1

的一點點道理在官方文檔中記錄下Object Fields and Entity Properties。以下是重構規則的結果:

  • 向您的類添加新的可空字段將導致所有現有實體對該字段爲空。
  • 添加新的集合或數組字段將導致所有現有實體具有該字段的空集合或數組。
  • 當您嘗試加載現有實體時,添加新的非空字段將導致引發異常。
  • 刪除字段不會導致錯誤;現有實體將保留舊字段,直到它們再次加載並保存。
  • 更改字段的類型將導致App Engine嘗試將舊值轉換爲新的數據類型;如果演員劇照無效,則會拋出異常。數字類型是一個例外;在這種情況下,值被轉換而不是強制轉換,並且溢出不會導致異常。

如果您需要進行上述簡單修改無法實現的重構,則可能需要使用App Engine mapreduce library

+1

我認爲OP的問題關鍵在於更改當您更改某個類的包時會發生什麼。 – 2010-07-21 18:56:58

+0

有用的信息,但不是我所問的(: – corydoras 2010-07-22 00:00:32

1

我假設的情況是這樣的:

我有一個類「com.peter.Foo」我一直在使用JDO堅持,我想將它更改爲「com.nick.Foo 「,我所有現有的Foo實體都需要更新嗎?換句話說,JDO是否在將java類映射到數據存儲區Kind時使用包名?

AFAIK,appengine中的JDO工具只使用類名。這是因爲當我查看管理控制檯時,數據查看器和數據存儲區統計信息僅通過類名引用我的實體。因此,如果您保持類名相同,只更改包名稱,那麼您的實體應該沒問題。

+0

謝謝。我會測試它並報告回來,以防其他人有相同的問題 – corydoras 2010-07-22 00:01:13

+0

如果管理控制檯只顯示類名稱,那麼你是正確的: JDO只有它才能運行。更改軟件包不會影響反序列化。 – 2010-07-22 10:05:23

相關問題