【问题标题】:Porting app engine JDO app to MySql backend将应用引擎 JDO 应用移植到 MySql 后端
【发布时间】:2014-04-15 04:49:05
【问题描述】:

我有一个使用 JDO 的大小合适的 App Engine 应用程序,我想使用 DataNucleus 将它移植到 MySql 后端。我预计这不会太难。然而,我遇到的一件事是主键。

App Engine 使用 Key 类来表示主键。这个类基本上是几个字符串的组合,指示对象的类型和名称,加上对父键的可选引用(直到最上面的父键的整个键链构成完整的键)。我的关键声明如下所示:

@PersistenceCapable
class Whatever {
  ...
  @PrimaryKey
  private Key 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 类转换为 String 以用作实际的 JDO 主键.我宁愿不这样做,因为它看起来很乱,但我不知道该怎么做。

【问题讨论】:

    标签: java mysql google-app-engine jdo datanucleus


    【解决方案1】:

    如果您为关系使用了“密钥”(即使您的模型与 GAE 数据存储限制相适应),那么您将无法直接针对 RDBMS 运行它(如果您希望这等同于RDBMS 中的关系和 FK)。这些需要更改为相关对象的真实对象引用。

    至于课程的 PK,我记得有人提到 2009 年 GAE 推出时的 IBM 视频,他们使用 GAE“应用程序”(以 Key 作为主键字段等)并在一些人的帮助下包含 Key 类等的小 jar,使其可针对 RDBMS 运行;有一段时间没看到了,也许在 YouTube 上?或者,您可以为 Key 类型提供一个 DataNucleus“TypeConverter”,看看这是否可行?

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 2012-02-20
      • 1970-01-01
      • 2011-12-12
      • 2012-07-27
      • 2015-05-30
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多