相当于Google App Engine上JPA / JDO中重复的NDB StructuredProperty

时间:2013-04-17 20:20:54

标签: google-app-engine jpa datanucleus app-engine-ndb

NDB中的StructuredProperties列表由许多重复属​​性建模,StructuredProperty's模型类的每个属性有一个重复属性。 (见这里:https://developers.google.com/appengine/docs/python/ndb/properties#structured.

我在Google App Engine上使用JPA找到的封闭等效内容是@Embedded的{​​{1}}列表。但是,存储格式现在不同了。 JPA的GAE / J插件为嵌入实体的每个属性生成每个嵌入实体一列(请参阅此处:http://datanucleus-appengine.googlecode.com/svn-history/r979/trunk/src/com/google/appengine/datanucleus/StoreFieldManager.java)。 (对于长列表,这会生成包含许多列的行。)

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

增加:

对于那些比Python更熟悉Java的人,我发现基于Java的Objectify框架以与NDB相同的方式存储嵌入式类的集合:http://code.google.com/p/objectify-appengine/wiki/Entities#Embedding,这是我想要实现的方式与JPA(或JDO):

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

@Embeddables

使用此设置,运行以下代码:

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>();
}

结果行布局(使用数据存储级别的重复属性)是:

ones.foo:[“foo1”,“foo2”,“foo3”,“foo4”]

ones.two.bar:[“bar1”,“bar2”,“bar3”,“bar4”]

1 个答案:

答案 0 :(得分:1)

Google的嵌入式集合的JDO / JPA插件定义已在中指定 https://code.google.com/p/datanucleus-appengine/issues/detail?id=258&can=1&q=embedded&colspec=ID%20Stars%20Type%20Status%20Priority%20FoundIn%20TargetRelease%20Owner%20Summary

如果你想要如何存储它的其他定义(并且有许多方法可以存储它),那么你就会在Googles的问题跟踪器上引发一个问题(如果你想要更快而不是更晚的功能) ,然后提供一些资源来实现它)