Собственные отношения могут быть довольно сложными в GAE. Я помню, как сражался с ними часами.
Прежде всего, у вас есть собственный цикл отношений. Я сомневаюсь, что это поддерживается GAE. Таким образом, вам нужно изменить одну из сущностей, чтобы использовать Key
для ссылки на другую, вместо прямой связи с объектом (т.е. отношения с собственностью).
Например:
@PersistenceCapable
public class BuddyData {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key key;
// use Key instead of MyInfoClass
@Persistent
private Key myInfoClass;
}
Во-вторых, при получении списка BuddyData
убедитесь, что PersistenceManager
все еще открыт. Если вы делаете это так:
PersistenceManager pm = PMF.get().getPersistenceManager();
MyInfoClass info = pm.getObjectById(MyInfoClass.class, key);
pm.close();
info.getBuddyList();
Тогда содержимое buddyList
будет пустым.
В этом случае вам нужно либо переместить pm.close()
после getBuddyList()
, либо установить его в качестве группы извлечения по умолчанию (см. Ниже), которая будет охотно выполнять предварительную выборку всего содержимого с потенциальной потерей производительности.
@Persistent(mappedBy = "myInfoClass", defaultFetchGroup = "true")
private List <BuddyData> buddyList;
Удачи.