2016-02-25 2 views
2

En JPA ou Hibernate, est-il possible de fusionner une nouvelle entité (qui n'a pas de valeur de clé primaire) dans un contexte de persistance basé sur une clé unique autre que la clé primaire?Fusion en JPA/Hibernate basé sur une clé unique au lieu de la clé primaire

Ou est-ce que la fusion JPA/Hibernate est uniquement effectuée sur les clés primaires?

Si cela est impossible avec un simple appel de méthode, sont mes seules options soit:

  1. remplacer la clé primaire existant par le code clé unique
  2. d'écriture qui trouve toute entité existante en utilisant la les valeurs des attributs dans la clé unique. Si je devais faire ceci, je suppose que j'écrirais une méthode statique qui recherche @UniqueConstraint annotations, et recherche des entités existantes basées sur les attributs dans les @UniqueConstraint s. Je vais essayer de fusionner dans la première entité qui a été trouvée pour l'un des @UniqueConstraint s. Si aucune correspondance, alors je pourrais juste persister la nouvelle entité.

Répondre

0

Mise en veille prolongée nécessite seulement une clé unique pour la propriété @Id, et, bien que généralement la clé primaire est utilisée à cet effet, vous pouvez utiliser une clé unique pour la propriété @Id.

Plus, vous pouvez utiliser une clé primaire pour la propriété @Id et une clé unique comme @NaturalId. Vous pouvez extraire l'entité par son ID naturel et la fusionner dans un autre Session car la fusion prend une entité et non un identificateur.