我有一个使用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主键。我宁愿不这样做,因为它看起来很混乱,但我不知道如何去做,否则。