2014-04-15 23 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类型,看看它是否可行?

相关问题