2014-04-15 81 views
0

我有一個使用JDO的體積適中的App Engine應用程序,我想使用DataNucleus將它移植到MySql後端。我不認爲這會太困難。但是,我遇到的一件事是主鍵。將應用程序引擎JDO應用程序移植到MySql後端

App Engine使用Key類來表示主鍵。這個類基本上是指示對象的類型和名稱的幾個字符串的組合,以及對父鍵的可選引用(整個鍵直到最上面的父鍵組成整個鍵)。我的鑰匙聲明看起來是這樣的:

@PersistenceCapable 
class Whatever { 
    ... 
    @PrimaryKey 
    private Key key; 
    ... 
} 

我準備實現自己的密鑰(及其相關類的KeyFactory)的版本,但它看起來像我實際上沒有可能能夠使用它作爲一個真正的主鍵你在App Engine中的做法。我沒有看到任何方式使用像這樣的自定義類作爲純樸的DataNucleus JDO的關鍵。儘管文檔似乎表明DataNucleus爲每個主鍵創建了一個關鍵類,但該關鍵類通常是自動生成的,並且實際上並沒有將該關鍵類聲明爲要存儲的類的成員。即使在你有多個主鍵的情況下,如果你實際上定義主鍵類,你存儲在類的主要的組成部分,你想存儲:

@PersistenceCapable(objectIdClass=PersonPrimaryKey.class) 
class Person { 
    @PrimaryKey 
    private String firstname; 
    @PrimaryKey 
    private String lastname; 
    // You can't do this: 
    // private PersonPrimaryKey; 
    ... 
} 
class PersonPrimaryKey { 
    private String firstname; // has to match above 
    private String lastname; // has to match above 
    ... // etc other methods 
} 

複合鍵實際上是最接近這是App Engine所具有的功能,但最終我無法看出它們是如何解決我的問題的,因爲它們有類似的限制。

有什麼想法嗎?除了在PrimaryKeys中使用的Key對象之外,我還有很多對象存儲其他類型對象(外鍵)的鍵的位置,以及查詢查找中其他位置使用的鍵,它遍佈整個代碼庫。如果我必須解決這個問題,我必須實現自己的Key作爲參考類,然後放入一些額外的操作來將Key類轉換爲字符串或從字符串轉換爲實際的JDO主鍵。我寧願不這樣做,因爲它看起來很混亂,但我不知道如何去做,否則。

回答

0

如果您已經使用「關鍵」關係(即混搭您的模型以適應這些GAE數據存儲限制),那麼您將無法直接針對RDBMS運行它(如果您希望等同於RDBMS中的關係和FK)。那些需要改變爲相關對象的真實對象引用。

至於班級的PK,我記得有人提到2009年GAE推出時,他們以GAE「應用程序」(以Key作爲主鍵字段等),並在一些包含Key類的小jar包,使它可以針對RDBMS運行;沒有看到它一段時間,也許在YouTube上?或者,你可以提供一個DataNucleus的「TypeConverter」作爲Key類型,看看它是否可行?

相關問題