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”]
答案 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的问题跟踪器上引发一个问题(如果你想要更快而不是更晚的功能) ,然后提供一些资源来实现它)