Pergunta

Eu omitido algum código (declarações de pacote, importações, outros campos) por falta. Eu tenho relação aqui simples One-para-muitos. Funcionou muito bem até 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
}

Agora eu preciso para obter (select) todos os 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()
   }
 }

Mas há no problema - consulta dá-me 12 restaurantes (como em DB), mas cada restaurante tem 0 Endereço mas em Datastore cada restaurante tem mínimo de 2 endereços.

Tem a todos o mesmo problema ou sabe a solução?

Foi útil?

Solução 2

Se alguém vai ter o mesmo problema:

Substitua

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

com

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

Outro método é que você tem para endereços "toque" propriedade para cada restaurante na lista recuperada antes de fechar PersistentManager. Depois PersistenManager ser fechado, você não pode recuperar qualquer coisa de armazenamento de dados e restaurante mantém nulo.

Solução encontrada com ajuda de google-appengine-java usuários.

Outras dicas

Tem certeza os endereços não são preguiçosos carregado? Apenas um palpite ... existe alguma maneira de forçar uma carga "ansioso" dos objetos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top