我有一個使用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主鍵。我寧願不這樣做,因爲它看起來很混亂,但我不知道如何去做,否則。