Question

J'ai omis du code (déclarations de paquet, les importations, d'autres domaines) pour la brièveté. J'ai ici simple à-plusieurs. Il a bien fonctionné jusqu'à ce moment.

@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
}

Maintenant, je dois obtenir (choisir) tous les restaurants 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()
   }
 }

Mais il y a le problème - requête me donne 12 restaurants (comme dans DB), mais Chaque restaurant a 0 Adresse mais dans tous les restaurants Datastore a 2 adresses minimum.

Avoir quelqu'un le même problème ou connaît la solution?

Était-ce utile?

La solution 2

Si quelqu'un a le même problème:

Remplacez

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

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

Une autre méthode est que vous devez adresse « contact » pour la propriété tous les restaurants dans la liste récupérée avant la fermeture PersistentManager. Après PersistenManager vous ne pouvez pas être fermé récupérer quoi que ce soit de datastore et le restaurant conserve null.

Solution trouvée avec l'aide de google-appengine-java utilisateurs.

Autres conseils

Êtes-vous sûr que les adresses ne sont pas paresseux chargé? Juste une supposition ... est-il un moyen de forcer une charge « avide » des objets

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top