J'ai un peu de problème avec la persistance JDO d'une liste d'objets récupérés.Google App Engine (Java) + Spring géré PersistenceManager
Ce que je veux faire est de:
- Fetch liste des "Commandes"
- Modifier une propriété "statut"
- Faire la mise à jour majeure partie des "Commandes"
Qu'est-ce que J'ai jusqu'à présent est "Objet avec id ... est géré par un gestionnaire d'objets différent". Mais attendez, je n'ai pas fait face à un tel problème sans le printemps!
J'ai essayé de le déboguer comme:
List<Orderr> orders = orderDao.findByIdAll(ordersKeys);
for(Orderr o : orders) {
System.out.println(JDOHelper.getPersistenceManager(o).hashCode());
//hashcode is 1524670
o.setSomething(somevalue);
}
orderDao.makePresistentAll(orders); //hashcode inside is 31778523
makePersistentAll ne fait rien:
try {
System.out.println(getPersistenceManager().hashCode());
getPersistenceManager().makePersistentAll(entities);
} finally {
getPersistenceManager().close();
}
Toutes mes OTI étendent JdoDaoSupport. Le Pmf est injecté et géré au printemps. Enfin, voici la question: Pourquoi le gestionnaire de persistance est-il fermé après findByIdAll? Ou pourquoi ai-je une nouvelle instance de gestionnaire de persistance? Ma méthode findByIdAll n'appelle pas de close sur le gestionnaire de persistance, bien sûr.
Bien sûr, si j'appelle makePersistent pour chaque "commande" cela fonctionne bien. Mais il rompt la superposition de la logique des affaires et base de données ...
UPD viens de découvrir que tous les appels à makePersistentAll ne fonctionnent pas du tout après la migration au printemps réussi PersistenceManager. Avant le printemps, j'utilisais le vieux assistant PMF.get() et tout était brillant!
Bien que je développe l'application GAE, ce n'est pas spécifique. J'ai la même chose sur localhost SDK (rien que Jetty). Et j'ai pensé que, comme vous le dites, "Gestionnaire de session DB" est PersistenceManagerFactory mais pas PersistenceManager. Je peux récupérer mon ancien PersistenceManager de chaque objet, mais ce n'est pas comme ça que je devrais le faire. Cela signifie que ce n'est pas fermé du tout, mais enlevé au printemps de Dao, je suppose. – vshulyak
Hmm. Ensuite, je pense que nous sommes allés au-delà de ma capacité à vous aider. J'ai utilisé du printemps dans une application GAE, mais notre relation n'était pas heureuse.Désolé, et bonne chance! –
Merci! Oui, la question n'est pas évidente ... – vshulyak