5 votes

Datanucleus gae.pk-id non rempli lors du makePersistent

Lorsque je fais persister une classe qui définit à la fois "gae.encoded-pk" et "gae.pk-id", l'encoded-pk est mis à jour, mais l'id reste nul. Aucune exception n'est levée et le code est un simple copier-coller de la documentation de Google, donc je ne sais pas ce qui peut se passer ici.

La classe définit :

@PersistenceCapable 
public class MyClass {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
    private String encodedKey;

    @Persistent
    @Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
    private Long keyId;

Et je le fais persister comme ça :

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
    pm.makePersistent(myInstance);
    // myInstance = pm.makePersistent(myInstance); - Produces the same result.
} finally {
    pm.close();
}

J'utilise le débogueur pour parcourir ce code, mais le keyId reste nul, même après la fermeture du gestionnaire de persistance.

Je dois également préciser que le système est exécuté localement à l'aide du kit de développement Google Appengine. Toute indication sur la façon dont je peux déboguer ce problème serait très appréciée !

1voto

craigrs84 Points 397

J'ai trouvé cette réponse :

Le plugin JDO de GAE ne définit jamais un champ "gae.pk-id"/"gae.pk-name" que lorsqu'il lit un champ marqué de cette manière dans la base de données (il suffit de faire une recherche dans le tronc SVN, FetchFieldManager est le seul endroit où il est chargé - il ne le définit pas lorsqu'il effectue un PUT). Je n'ai aucune idée de ce qu'il faisait dans la version 1.x, mais tous les tests de GAE passent dans la version 2.x comme dans la version 1.x. Mais cette "fonctionnalité" n'est pas un JDO standard de toute façon, donc peu intéressante pour moi.

Voir : Impossible d'obtenir l'ID de l'entité persistante JDO nouvellement créée à l'aide du plug-in DataNucleus GAE/J version 2.1.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X