Google app engine 相当于Google App Engine上JPA/JDO中重复的NDB结构属性

Google app engine 相当于Google App Engine上JPA/JDO中重复的NDB结构属性,google-app-engine,jpa,datanucleus,app-engine-ndb,Google App Engine,Jpa,Datanucleus,App Engine Ndb,NDB中的StructuredProperties列表由许多重复属性建模,每个StructuredProperty的模型类的属性一个重复属性。(见此处:) 我在Google App Engine上找到的JPA的封闭等价物是@Embedded列表中的@embeddedables。但是,存储格式现在不同了。JPA的GAE/J插件为每个嵌入实体的每个属性生成一列(请参见此处)。(例如,对于长列表,这将生成包含许多列的行。) 有没有一种简单的内置方法可以复制NDB的方法来使用JPA或JDO处理重复的复合

NDB中的
StructuredProperties
列表由许多重复属性建模,每个
StructuredProperty的
模型类的属性一个重复属性。(见此处:)

我在Google App Engine上找到的JPA的封闭等价物是
@Embedded
列表中的
@embeddedables
。但是,存储格式现在不同了。JPA的GAE/J插件为每个嵌入实体的每个属性生成一列(请参见此处)。(例如,对于长列表,这将生成包含许多列的行。)

有没有一种简单的内置方法可以复制NDB的方法来使用JPA或JDO处理重复的复合值

增加:

对于那些更熟悉Java而不是Python的人,我发现基于Java的Objectify框架以与Python:上的NDB相同的方式存储嵌入式类集合,这是我希望使用JPA(或JDO)实现的方式:

为了方便起见,我在这里复制了他们的示例:

import com.googlecode.objectify.annotation.Embed;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;

@Embed
class LevelTwo {
    String bar;
}

@Embed
class LevelOne {
    String foo;
    LevelTwo two
}

@Entity
class EntityWithEmbeddedCollection {
    @Id Long id;
    List<LevelOne> ones = new ArrayList<LevelOne>();
}
import com.googlecode.objectify.annotation.Embed;
导入com.googlecode.objectify.annotation.Entity;
导入com.googlecode.objectify.annotation.Id;
@嵌入
二级{
弦杆;
}
@嵌入
一级{
串福;
二级二级
}
@实体
类EntityWithEmbeddedCollection{
@Id长Id;
List one=new ArrayList();
}
使用此设置,运行以下代码:

EntityWithEmbeddedCollection ent = new EntityWithEmbeddedCollection();
for (int i=1; i<=4; i++) {
    LevelOne one = new LevelOne();
    one.foo = "foo" + i;
    one.two = new LevelTwo();
    one.two.bar = "bar" + i;

    ent.ones.add(one);
}

ofy().save().entity(ent);
EntityWithEmbeddedCollection ent=新EntityWithEmbeddedCollection();

对于(inti=1;iGoogle的JDO/JPA插件对嵌入式集合的定义在


如果您想知道如何存储该功能的其他定义(存储该功能的方式有很多种),那么您需要在Google的问题跟踪程序上提出一个问题(如果您希望尽早获得该功能,那么就提供一些资源来实现它)

定义java类而不是参考一些Python语法。完成后,有人可以回答如何使用JDO或JPA持久化它。添加了一些代码,说明如何使用Objectify(无需提及Python)实现。感谢您提供了指向规范的链接。