2011-05-13 69 views
6

我們在我們的一個項目中使用了JDO。這已經運行了很長一段時間,自然我們需要稍微改變模型。在JDO中移植字段

在JDO的實體類中遷移字段時的最佳做法是什麼?

enum MyEnum { 
    REGULAR, 
    MYOLDTYPE // Delete this 
} 
@PersistenceCapable 
public class Entity { 
    @Persistent 
    MyEnum myEnumType; 
    @Persistent 
    String myString; // Rename this 

} 

如果我刪除一個枚舉值將會有一個例外,如果是從數據庫加載時已經堅持,如何遷移呢?

如果我想將myString重命名爲myNewString,如何將列重命名爲新名稱?

+0

它可能取決於您的JDO提供者。 JDO規範是否指定了枚舉如何映射,還是將它留給提供者? – 2011-05-13 13:24:47

+0

我正在使用datanucleus。就我所知,枚舉按名稱映射。 – jontro 2011-05-13 14:46:18

回答

1

首先看看你的數據存儲(RDBMS ?,別的東西?),看看你是持久化爲字符串還是基於數字的。

如果你改變了枚舉,那麼你就有責任要麼

  1. 遷移數據存儲

  2. 更改枚舉定義的內容,以便Enum.valueOf(String)返回你想要什麼舊值映射到。或者,如果堅持使用RDBMS,請在http://www.datanucleus.org/products/accessplatform_3_0/jdo/types.html的腳下使用DataNucleus擴展,您可以在其中定義獲取String值的Enum的方法。

+0

謝謝!我曾希望有一種使用JDO遷移數據的標準方法。 – jontro 2011-05-16 16:25:56