2011-05-23 5 views
0

La méthode find dans JPA n'accepte que la clé primaire, est-il possible d'inclure la propriété Version pour rechercher l'entité. Pourquoi voudriez-vous utiliser la propriété version pour trouver une entité?JPA Hibernate Recherche par ID & Version

Répondre

1

Si vous utilisez un champ de clé primaire de substitution (tel que recommandé par Hibernate), vous devriez être capable d'identifier une ligne par l'identifiant seul.

Le champ Version est utilisé par Hibernate pour s'assurer qu'une entité chargée n'est pas modifiée entre le chargement et la persistance.

Si vous voulez vraiment utiliser l'identifiant et la version que vous avez besoin d'une requête:

Query query = session.createQuery("select from MyTable where id = ? and version =?"); 
    query.setParameter(0, myId); 
    query.setParameter(1, myVersion); 
    query.uniqueResult(); 
+0

Je suis d'accord sur la clé de substitution; mais j'ai une exigence pour valider la version d'un objet avant de fusionner avec l'entité existante dans la base de données. L'idée était d'interroger la base de données avec l'Id & Version en évitant la vérification manuelle de la version. L'approche que vous avez suggérée pourrait fonctionner mais je cherche une approche générique car les colonnes Id dans toutes mes entités ont des noms différents. – Rakesh

+0

Vous ne pouviez pas simplement obtenir l'entité avec l'ID et ensuite obtenir la version de celui-ci afin de confirmer la version avant la fusion? Il n'y a rien à gagner en utilisant l'identifiant et la version car une ligne n'a qu'une seule version qui ne fait pas partie de la clé droite? –

+0

l'approche que vous avez suggéré plus tôt avec la requête a résolu mon problème et j'ai pu interroger en utilisant à la fois l'entité et la version. Même si les entités utilisent des conventions de nommage différentes pour les identifiants, je pourrais utiliser id et hibernate tout en générant le sql remplacé l'identifiant avec le nom d'identifiant correspondant. – Rakesh