5

Wenn ich eine Klasse mache, die sowohl "gae.encoded-pk" als auch "gae.pk-id" persistent definiert, wird der codierte-pk aktualisiert, aber die ID bleibt null . Es gibt keine Ausnahme und der Code ist eine direkte Kopie aus der Google-Dokumentation, so dass ich nicht weiß, was hier passiert.Datanucleus gae.pk-id nicht gefüllt mit makePersistent

Die Klasse definiert:

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

Und ich mache es hartnäckig wie folgt aus:

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

ich den Debugger bin mit durch diesen Code zu dem Schritt, aber die keyId bleibt null, auch nach Der Persistenzmanager ist geschlossen.

Ich sollte auch darauf hinweisen, dass dies lokal mit dem Google Appengine Development Kit ausgeführt wird. Irgendwelche Hinweise, wie ich dies debuggen könnte, würde sehr geschätzt werden!

+0

das gleiche Problem hier – craigrs84

Antwort

1

fand ich diese Antwort:

Die GAE JDO-Plugin immer nur setzt einen „gae.pk-id“/„gae.pk-namen“ Feld, wenn es in einem Feld liest mit, dass aus dem Datenspeicher markiert (tun Sie einfach eine Suche in SVN-Trunk, FetchFieldManager ist der einzige Ort, wo es geladen ist - es setzt es nicht, wenn es ein PUT macht. Keine Ahnung, was es in 1.x getan hat, aber alle GAE-eigenen Tests laufen in 2.x wie in 1.x. Aber dann ist das "Feature" sowieso kein Standard-JDO, also für mich wenig interessant.

Siehe: Unable to get ID of newly-created JDO persistent entity using GAE/J DataNucleus plug-in version 2.1.2