AppEngine - несколько отношений одного типа - PullRequest
10 голосов
/ 11 июня 2011

Мне нужно иметь два объекта одного типа. По умолчанию appengine не разрешает это, но я нашел этот параметр: datanucleus.appengine.allowMultipleRelationsOfSameType, поэтому я могу сохранить два объекта одного типа.

В режиме отладки перед вызовом метода makePersistent я проверял значение внутри каждого объекта, и они отличались друг от друга, однако при попытке восстановить значения из хранилища данных они были одинаковыми. Оба имели значение второго объекта?

Этот код предназначен для сохранения объекта FaseGAE:

manager = GAEDAOFactory.get().getPersistenceManager();
Key faseKey = KeyFactory.stringToKey(grupo.getFaseKey());
FaseGAE faseGAE = manager.getObjectById(FaseGAE.class, faseKey);
faseGAE.addGrupoGAE(grupoGAE);
faseGAE = manager.makePersistent(faseGAE);
manager.close();

Этот код должен получить объект:

manager = GAEDAOFactory.get().getPersistenceManager();
FaseGAE faseGAE2 = manager.getObjectById(FaseGAE.class, faseKey);

Объект FaseGAE:

@PersistenceCapable
public class FaseGAE {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent private List<GrupoGAE> grupos;

Объект группы:

@PersistenceCapable
public class GrupoGAE {

    @PrimaryKey
    @Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent private List<MyClass1> list;

Объект MyClass1:

@PersistenceCapable
public class MyClass1 {

    @PrimaryKey
    @Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent private MyClass2 sameTypeObject1;
    @Persistent private MyClass2 sameTypeObject2;
    @Persistent private String testValue1;
    @Persistent private String testValue2;

Объект MyClass2:

@PersistenceCapable
public class MyClass2{

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

testValue1 и testValue2 содержат разные значения, но sameTypeObject1 и sameTypeObject2 имеют значение sameTypeObject2. Я проверил хранилище данных, и оба объекта были созданы с разными значениями. Кажется, что оба указывают на одну и ту же ссылку.

Я что-то не так делаю?
Что-то не хватает для работы с однотипными отношениями?
Определенно AppEngine не разрешает отношения одного типа?

1 Ответ

1 голос
/ 06 октября 2011

Я уже сталкивался с подобной проблемой раньше, я не слишком уверен, в чем ваша проблема и является ли она такой же. Но надеюсь, что этот ответ, по крайней мере, укажет вам правильное направление

Однако, естьВот пара «лучших практик», которые вы можете использовать при использовании java с GAE.

1) реализовать Serializable для классов, т. е. открытый класс FaseGAE реализует Serializable - это позволит сохранять персистентные функциональные классы и извлекать их с объектами сеанса.

2) вы можете попробовать использовать objectify для хранилища данных GAE http://code.google.com/p/objectify-appengine/

...