Frage

Ich habe einige Code (Paket Erklärungen, Importe, andere Felder) weggelassen für Kürze. Ich habe hier einfach One-to-Many Beziehung. Es funktionierte bis zu diesem Moment in Ordnung.

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

Jetzt muss ich bekommen (Auswahl), alle Restaurants von 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()
   }
 }

Aber es gibt auf Problem - Abfrage gibt mir 12 Restaurants (wie in DB), aber Jedes Restaurant hat 0 Adresse aber in Datastor jedes Restaurant hat mindestens 2 Adressen.

Haben Sie jemand das gleiche Problem oder kennt die Lösung?

War es hilfreich?

Lösung 2

Wenn jemand das gleiche Problem hat:

Ersetzen

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

mit

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

Eine andere Methode ist, dass Sie zu „berühren“ Adressen Eigenschaft haben für jedes Restaurant in der abgerufenen Liste vor dem Schließen PersistentManager. Nach PersistenManager Sie geschlossen werden kann nicht Abrufen alles von Datenspeicher und Restaurant hält null.

Lösung mit Hilfe von google-appengine-java Benutzer.

Andere Tipps

Sie sind sicher, dass die Adressen nicht faul geladen? Nur eine Vermutung ... ist es eine Möglichkeit, einen „eifrig“ Laden der Objekte zu zwingen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top