Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将应用程序引擎JDO应用程序移植到MySql后端_Java_Mysql_Google App Engine_Jdo_Datanucleus - Fatal编程技术网

Java 将应用程序引擎JDO应用程序移植到MySql后端

Java 将应用程序引擎JDO应用程序移植到MySql后端,java,mysql,google-app-engine,jdo,datanucleus,Java,Mysql,Google App Engine,Jdo,Datanucleus,我有一个相当大的应用程序引擎应用程序使用JDO,我想使用DataNucleus将其移植到MySql后端。我预计这不会太困难。然而,有一件事我遇到了麻烦,那就是主键 应用程序引擎使用密钥类来表示主键。这个类基本上是几个字符串的组合,这些字符串指示对象的类型和名称,再加上对父键的可选引用(整个键链直到最顶端的父键构成完整的键)。我的关键声明如下所示: @PersistenceCapable class Whatever { ... @PrimaryKey private Key key;

我有一个相当大的应用程序引擎应用程序使用JDO,我想使用DataNucleus将其移植到MySql后端。我预计这不会太困难。然而,有一件事我遇到了麻烦,那就是主键

应用程序引擎使用密钥类来表示主键。这个类基本上是几个字符串的组合,这些字符串指示对象的类型和名称,再加上对父键的可选引用(整个键链直到最顶端的父键构成完整的键)。我的关键声明如下所示:

@PersistenceCapable
class Whatever {
  ...
  @PrimaryKey
  private Key key;
  ...
}
我已经准备好实现我自己版本的Key(及其关联的类KeyFactory),但看起来我可能无法像在appengine中那样将其用作真正的主键。我不认为有任何方法可以将这样的自定义类用作普通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
}
复合键实际上是最接近应用程序引擎的东西,但最终我也看不出它们如何解决我的问题,因为它们有类似的限制

有什么想法吗?除了在PrimaryKeys中使用的Key对象之外,我还有很多其他类型对象(外键)的键存储位置,加上查询查找中其他地方使用的键,它们遍布整个代码库。如果我必须解决这个问题,我必须实现我自己的Key版本以用作引用类,然后加入一些额外的操作来将Key类转换为字符串,以用作实际的JDO主键。我宁愿不这样做,因为它看起来很混乱,但我不知道怎么做。如果您对关系使用了“键”(即,对模型进行Bastarid处理以适应GAE数据存储的限制),那么您将无法直接针对RDBMS运行它(如果您认为这等同于RDBMS中的关系和FK)。这些需要更改为相关对象的真实对象引用

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