Le Java documentation indique qu'une application peut effectuer une requête au cours d'une transaction, mais seulement si elle inclut un filtre ancêtre, mais qu'il n'y a pas de documentation pour savoir comment fais le. Quelqu'un peut-il fournir un exemple de code qui montre comment le faire de la manière la plus concise possible?Requête dans une transaction avec un filtre ancêtre dans Google App Engine (Java)
Répondre
Si vous utilisez le magasin de données de bas niveau, c'est facile, car "ancêtre" est un concept de banque de données et non un concept JDO/JPA AFAIK.
here est un lien vers la javadoc montrant le constructeur de requête qui prend un ancêtre clé
Essayez cette approche:
// PersistenceManager pm = ...;
Transaction tx = pm.currentTransaction();
User user = userService.currentUser();
List<Account> accounts = new ArrayList<Account>();
try {
tx.begin();
Query query = pm.newQuery("select from Customer " +
"where user == userParam " +
"parameters User userParam");
List<Customer> customers = (List<Customer>)
query.execute(user);
query = pm.newQuery("select from Account " +
"where parent-pk == keyParam " +
"parameters Key keyParam");
for (Customer customer : customers) {
accounts.addAll((List<Account>)
query.execute(customer.key));
}
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
Plus d'informations sont disponibles ici: http://code.google.com/appengine/docs/java/datastore/transactions.html#Uses_For_Transactions
je me débattais avec celui-ci pendant un certain temps, mais ce qui suit va fonctionner! La réponse courte est que JDO utilisé avec App Engine peut certainement prendre en charge les requêtes Ancestor, donc vous n'avez pas besoin de recourir à l'API de bas niveau propre à App Engine, surtout si vous voulez rester avec JDO dans votre application.
Étape 1:
Dans la classe des enfants assurez-vous d'avoir la variable d'instance suivante. Le nom réel de la variable n'a pas d'importance. Ce qui est important, c'est l'annotation.
@Persistent
@Extension(vendorName="datanucleus", key="gae.parent-pk", value="true")
private String mParentEncKey;
Étape 2:
Lors de l'interrogation de l'objet enfant (s) par la clé parent, vous voulez puis filtrer sur le parentKey via le nom de la variable d'instance vous avez créé ... dans ce cas Cet exemple est pour si vous souhaitez interroger un ensemble d'objets enfants qui ont une propriété, étant donné que vous connaissez la clé parent et cette propriété.
public static List<ChildObject> queryYourChildObjects(String parentKey, String someProperty) {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(ChildObject.class);
q.setFilter("mParentEncKey == parentKeyParam && property == propertyParam");
q.declareParameters("String parentKeyParam, String propertyParam");
List<ChildObject> results = (List<ChildObject>) q.execute(parentKey, someProperty);
return results;
}
C'est tout! J'espère que ça aide.
Vous pouvez également utiliser Objectify, comme dans cette réponse: http://stackoverflow.com/a/11365390/305689 – wescpy
- 1. google app engine OU filtre
- 2. Pagination dans Google App Engine avec Java
- 3. auto-rejoindre dans google app engine (java)
- 4. Comment récupérer des entités Google App Engine par ancêtre
- 5. Exception JDO dans la transaction google app engine
- 6. Google App Engine, JDO, utiliser Date dans le filtre
- 7. Comment implémenter Django comme une requête de filtre 'contains' avec Google App Engine?
- 8. Requête Google App Engine (pas de filtre) pour les enfants d'une entité
- 9. Ecommerce avec django dans google app engine
- 10. Comment commander par requête parent/parent Google App Engine?
- 11. problème avec db.get dans Google App Engine
- 12. Google App Engine Java, 301 redirection avec URL Rewrite Filter
- 13. Parent dans Google App Engine entité Groupes
- 14. Lamson dans Google App Engine?
- 15. Cron dans Google App Engine
- 16. Contraintes dans google-app-engine?
- 17. Google App Engine GQL requête question
- 18. Types de requête avancée Java App Engine
- 19. Problème avec Google App Engine
- 20. Google App Engine Datastore problème de requête
- 21. Google App Engine
- 22. HttpOnly cookies sur google app engine java
- 23. Google App Engine (Java) + Spring géré PersistenceManager
- 24. URL avec un slash dans Google App Engine
- 25. Connexion au site Web dans Java + Google App Engine
- 26. Clé codée Google App Engine en Java
- 27. Utilisation de memcache dans google app engine
- 28. Comment supprimer des index dans Google App Engine (Java)?
- 29. google app engine _method?
- 30. Utilisation de sous-filtres/requêtes dans Google App Engine
Vous n'avez pas effectué la transaction nulle part. – Price