Отношения «один ко многим».Выбор объектов из хранилища данных

StackOverflow https://stackoverflow.com/questions/1499140

Вопрос

Я пропустил какой -то код (объявления пакетов, импорт, другие поля) для шорты.У меня здесь простое отношение «один ко многим».До этого момента все работало нормально.

@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
class Restaurant implements Serializable {

 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 Key id

 @Persistent(mappedBy = "restaurant")
 List<RestaurantAddress> addresses = new ArrayList<RestaurantAddress>()
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
class RestaurantAddress implements Serializable {

 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 Key id

 @Persistent
 Restaurant restaurant
}

Теперь мне нужно получить (выбрать) все рестораны из БД:

def getRestaurantsToExport(final String dst, final int count) {
   String field = restaurantExportFields[dst]
   return transactionExecute() { PersistenceManager pm ->
     Query q = pm.newQuery(Restaurant.class)
     q.filter = "$field == null"
     q.setRange(0, count)
     return q.execute()
   }
 }

Но есть проблема - запрос выдает мне 12 ресторанов (как в БД), но каждый ресторан имеет 0 адресов, но в хранилище данных у каждого ресторана есть минимум 2 адреса.

Есть ли у кого-нибудь такая же проблема или знает решение?

Это было полезно?

Решение 2

Если у кого-то будет такая же проблема:

Заменять

@Persistent(mappedBy = "restaurant")
 List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>

с

@Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
 List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>

Другой метод заключается в том, что вы должны "коснуться" свойства addresses для каждый ресторан в полученном списке перед закрытием PersistentManager.После закрытия PersistenManager вы не можете извлекать что-либо из хранилища данных, а Restaurant сохраняет null.

Решение найдено с помощью Google-Appengine-Java пользователи.

Другие советы

вы уверены, что адреса не загружаются отложенно?Просто догадка...есть ли какой-нибудь способ заставить "торопливую" загрузку объектов

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top