Как автоматически получить вложенную коллекцию сущностей JDO? - PullRequest
3 голосов
/ 11 июля 2011

Вероятно, очень тривиальная проблема.

У меня есть объект, который выглядит следующим образом:

@PersistenceCapable  
public class Parent {

  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private String _id;

  @Persistent
  private List<Child> _children;

   //...   
}

... вложенная сущность выглядит следующим образом (я вынужден объявить первичный ключкак ключ, в противном случае он не будет сохраняться):

@PersistenceCapable  
public class Child {

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

   @Persistent
   private String _whatever;

   //... 
}

Когда я сохраняю, все сохраняется, все в порядке (включая дочерние объекты), но я хотел бы вернуть все, получив родительский объект (например, getObjectById), но коллекция возвращается как ноль.

Собственные отношения один-ко-многим , похоже, то, что я ищу - но мне сложно понять, как это может помочьмне вернуть родительский объект с заполненной коллекцией дочерних сущностей.

Любая помощь приветствуется!

Ответы [ 2 ]

4 голосов
/ 26 июня 2012

@ Persistent (defaultFetchGroup = "true") Трюк, ты прав.

Содержимое вашего атрибута _children загружается только при первом обращении к нему (до pm.close!). Это называется ленивой загрузкой. Если вы хотите, чтобы дочерняя сущность или коллекция дочерних сущностей загружались напрямую по умолчанию, примените описанный выше «трюк».

В моем приложении, в случае Коллекции дочерних сущностей, оно генерирует сообщение об ошибке (хранилище данных не поддерживает объединения ..) на сервере Dev, но вы можете игнорировать эту неправильную ошибку, она отлично работает в Dev Prod Environments.

Имейте в виду, что выборка Коллекции через ее родительскую сущность стоит 1 выборка из хранилища данных на дочернюю сущность.

1 голос
/ 14 июля 2011

это похоже на дело:

@Persistent(defaultFetchGroup = "true")
...