Uno-a-muchos relación. Selección de objetos de almacén de datos
-
19-09-2019 - |
Pregunta
he omitido algún código (declaraciones de paquetes, las importaciones, otros campos) de dificultad. Tengo aquí sencilla relación Uno a Muchos. Funcionó bien hasta este momento.
@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
}
Ahora tengo que conseguir (seleccionar) todos los restaurantes de DB:
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()
}
}
Sin embargo, hay un problema en - consulta me da 12 restaurantes (como en DB), pero Cada restaurante tiene 0 Dirección almacén de datos pero en cada restaurante tiene un mínimo de 2 direcciones.
Tener a todos el mismo problema o sabe la solución?
Solución 2
Si alguien va a tener el mismo problema:
Reemplazar
@Persistent(mappedBy = "restaurant")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
@Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
Otro método es que usted tiene que "toque" se ocupa de la propiedad de Cada restaurante en la lista recuperada antes de cerrar PersistentManager. Después PersistenManager que estando cerrado no puede recuperar algo de almacén de datos y el restaurante mantiene nula.
Solución encontrado con ayuda de google-appengine-java usuarios.
Otros consejos
¿está seguro de que las direcciones no son perezosos cargada? Sólo una suposición ... ¿hay alguna manera de forzar una carga "ansiosos" de los objetos