-
Génération d'ID dans JPA
Bonjour,
Je conçois une couche de persistance pour une application web sous un servlet Container Jetty.
Mon souci est que mes objets (entités) sont presque conformes à la norme des entités (JavaBean) mais ne contiennent pas d'Id, le problème est que je ne dois pas les modifier.
Est ce qu'il y a une solution pour que le fichier xml de mapping génére de façon automatique un id pour chaque chaque entité sans que celle-ci n'ait un attribut ID et les getters et setters qui vont avec.
Merci par avance pour votre réponse
Cordialement
-
Dans la spécification JPA, Il faut obligatoirement définir une des propriétés de la classe avec l'annotation @Id pour la déclarer comme étant la clé primaire de la table.
Cette annotation peut marquer soit le champ de la classe concernée soit le getter de la propriété. L'utilisation de l'un ou l'autre précise au gestionnaire s'il doit se baser sur les champs ou les getter pour déterminer les associations entre l'entité et les champs de la table. La clé primaire peut être constituée d'une seule propriété ou composées de plusieurs propriétés qui peuvent être de type primitif ou chaîne de caractères.
La clé primaire composée d'un seul champ peut être une propriété d'un type primitif, ou une chaîne de caractères (String).
Une deuxième solution :
Le modèle de base de données relationnelle permet la définition d'une clé primaire composée de plusieurs colonnes. L'API Java Persistence propose deux façons de gérer ce cas de figure :
-L'annotation @javax.persistence.IdClass
-L'annotation @javax.persistence.EmbeddedId
L'annotation @IdClass s'utilise avec une classe qui va encapsuler les propriétés qui composent la clé primaire. Cette classe doit obligatoirement :
- Être sérialisable
-Posséder un constructeur sans argument
-Fournir une implémentation dédiée des méthodes equals() et hashCode()
et Il est nécessaire de définir la classe de la clé primaire dans le fichier de configuration persistence.xml
Pour plus d'information,vous veuillez voir ces cours et tutoriels pour apprendre Java
.
-
Comme l’a dit clubist, vous êtes obligé d’avoir une clé primaire (pas de clé primaire = pas d’entité jpa).
Vous dites que vos classes ne contiennent pas de clé primaire => OK
Vous dites que vous ne pouvez pas les modifier pour rajouté un champ id => OK
La seule solution que vous avez maintenant (à mon avis) c’est de trouver dans vos entités (classes) une combinaison de champs qui soit unique par instance de classe (c’est la combinaison qui doit être unique et non les champs individuels). Et cette combinaison sera votre clé primaire composée. Vous n’avez plus qu’à suivre les indications données par clubist (IdClass).