Отношения «один ко многим».Выбор объектов из хранилища данных
-
19-09-2019 - |
Вопрос
Я пропустил какой -то код (объявления пакетов, импорт, другие поля) для шорты.У меня здесь простое отношение «один ко многим».До этого момента все работало нормально.
@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 пользователи.
Другие советы
вы уверены, что адреса не загружаются отложенно?Просто догадка...есть ли какой-нибудь способ заставить "торопливую" загрузку объектов