2012-03-27 19 views
0

Ich erstelle ein Objekt mit JDO und lassen Sie die GAE den Schlüssel für mich.Keys auf Google App Engine sind bestellt

@PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 

Als Ergebnisse der PersistenceManager.makePersistent(myObject), habe ich einen Schlüssel mit einem Long-Wert, das bestellt zu sein scheint. Ich habe bereits nach GAE-Dokumentation gesucht, aber ich kann nicht finden, wo das explizit dokumentiert ist. Ist dieser generierte Schlüssel nach der Erstellung geordnet?

Ich weiß, dass das nicht inkrementell ist.

Antwort

5

AFAIK-Tasten sind in Bereichen zugewiesen. Siehe DatastoreService.allocateIDs().

Soweit ich beobachtet habe, bekommt jede Instanz eine Reichweite. Wenn also Entitäten erstellt werden, sind IDs innerhalb eines Bereichs festgelegt, aber sie sind nicht geordnet, da sie aus verschiedenen Bereichen stammen.

Ich schätze: Sie versuchen herauszufinden, welche Entitäten neu sind? Fügen Sie eine Timestamp-Eigenschaft dann check for updates via cursors hinzu.

+0

Dies ist eine traurige Nachricht. Ich versuche, einen Index für o Entitätsgruppen zu erstellen, und ich würde verknüpfen, um meine Entitäten mit dem Zeitpunkt der Erstellung zu sortieren. Das bedeutet, dass ich die Zeitstempelspalte meinen Entitäten hinzufügen sollte? Es geht nicht anders? – Victor

+0

AFAIK, keine andere Möglichkeit. –

+0

@Victor Verteilte Systeme sind hart und monoton steigende IDs sind in einem verteilten System nicht praktikabel. Ein Zeitstempel ist überall eine bessere Idee. –