2

Je construis une application web en utilisant GAE Java. J'ai une classe qui utilise un identifiant long (généré par appengine) comme clé primaire. Je veux maintenant créer une nouvelle classe qui serait la classe parente de cette classe originale (une relation un à plusieurs), mais l'enfant doit avoir une clé primaire de type "clé", pas l'ID Long que j'ai à présent.Besoin de mettre à jour la clé primaire sur les objets existants dans GAE Java

Quelle est la meilleure façon de changer la clé primaire pour qu'elle soit de type "clé" plutôt que longue pour les entités persistantes existantes? Dois-je créer une nouvelle classe avec la clé primaire de type "clé" et instancier et persister de nouveaux objets qui copient les valeurs de champs des anciennes? Ou puis-je simplement mettre à jour la classe existante?

Merci

Répondre

3

En fait, la clé d'une entité persisté est considérée comme immuable. Changer la clé sera, sans aucun doute, équivalent à changer l'instance utilisée. Ce que je vous suggère est de lier votre objet initial à un enfant de votre parent créé.

0

Vous pouvez stocker les ID longs existants dans une liste de la classe parente: cela créerait la relation parent-enfant un-à-plusieurs nécessaire. Vous devrez gérer vous-même la cohérence (ce qui ne sera peut-être pas trop difficile si votre site n'a pas un trafic très élevé), et les classes parent et enfant ne seront pas dans le même groupe d'entités (implications pour les transactions) .

Changer la clé signifie changer l'Entité elle-même (et aussi son groupe d'entités).

Finalement, la solution qui vous convient dépendra des spécificités de votre problème. Par exemple, y a-t-il déjà beaucoup de données existantes? Est-ce une application en direct (c'est-à-dire, est-ce déjà utilisé)? Une autre solution pourrait être de migrer votre application vers un autre modèle de données (mieux adapté), et de le faire compte par compte (en verrouillant le compte pendant une courte période de temps). De cette façon, seules quelques personnes seront affectées par le changement (s'il leur arrive d'accéder à l'application lors de la migration de leur compte) plutôt que de perdre toute l'application.

Questions connexes