2013-04-17 5 views
0

Список StructuredProperties в NDB моделируется рядом повторяющихся свойств, одно повторное свойство на свойство класса модели StructuredProperty's. (См. Здесь: https://developers.google.com/appengine/docs/python/ndb/properties#structured.))Эквивалент повторяющегося NDB StructuredProperty в JPA/JDO на Google App Engine

Закрытый эквивалент, который я нашел с JPA в Google App Engine, представляет собой список @Embedded@Embeddables. Однако формат хранения теперь отличается. Плагин GAE/J для JPA генерирует по одному столбцу на встроенный объект на каждое свойство встроенного объекта (см. Здесь: http://datanucleus-appengine.googlecode.com/svn-history/r979/trunk/src/com/google/appengine/datanucleus/StoreFieldManager.java). (Для длинных списков это, например, генерирует строки со многими и многими столбцами.)

Есть ли простой встроенный способ скопировать NDB способ справиться с повторяющимися составными значениями с использованием JPA или JDO?

ДОБАВЛЕНО:

Для тех, кто более комфортно с Java, чем Python, я обнаружил, что Java на основе объективизации рамочные хранит коллекции встроенных классов таким же образом, как радиомаяк на Python: http://code.google.com/p/objectify-appengine/wiki/Entities#Embedding, который является, как я хотите достичь с помощью 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>(); 
} 

с помощью этой установки, запустите следующий код:

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

В результате компоновки строк (с использованием повторных свойств на уровне Datastore) затем:

ones.foo: [ "foo1", "foo2", "foo3", "foo4"]

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

+0

define класс java, а не ссылаться на некоторый синтаксис Python. Когда это будет сделано, кто-то сможет ответить на вопрос о том, как его сохранить, используя JDO или JPA. – DataNucleus

+0

Добавлен некоторый код, как это можно сделать с Objectify (который не требует упоминания Python). – Marc

ответ

1

СДО/JPA определение плагин Google, встроенных коллекций была указана в 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

Если вы хотите, чтобы некоторые другое определение того, как это ored (и существует много способов его хранения), тогда вы поднимаете проблему с этим трекером ошибок Googles (и если вы хотите использовать эту функцию раньше, чем позже, то предоставите некоторый ресурс для ее реализации).

+0

Спасибо за указание ссылки. – Marc

Смежные вопросы