[JAVA][HIBERNATE] Id via UserType

Id via UserType [JAVA][HIBERNATE] - Java - Programmation

Marsh Posté le 08-06-2011 à 18:40:16    

Bonjour,
 
J'ai une question concernant la mise en place d'Hibernate pour la persistence des beans d'un projet Java.
 
Je cherche à définir un Identifiant "complexe" sur ma Classe.
Cet identifiant est lui même une Classe, qui en contient une autre.
J'ai donc 3 classes imbriquées.
 
 
 
Contraintes
1/ Les beans sont gérés par une équipe transverse, je n'ai donc pas la possibilité :
- de les modifier.
- de mettre un oid.
- de refactorer
 
 
 
Modèle Java
Voici grosso modo le modèle que je dois mapper.

Code :
  1. class MonEntite {
  2.   Identifier id;   // My Primary Key
  3.   String message;
  4. }
  5. class Identifier {
  6.   String applicationCode;
  7.   Integer version;
  8.   ObjectType type;
  9. }
  10. class ObjectType {
  11.   String typeName;
  12. }


 
Ne me demandez pas pourquoi le modèle est comme ça :o
C'est historique, actuellement persisté dans certaines applis de la maison via des Daos SQL maintenus à la main... et pour le projet que je démarre, j'ai envie de mettre du Hibernate.
 
 
 
Modèle BDD
Donc concrêtement, tout va tenir dans la même table (quand même meilleur d'un point de vue lisibilité d'avoir les Ids en vif dans la table plutôt que de les externaliser dans une table externe avec une FK).
 


APP_CODE  |  VERSION  |  TYPE_NAME  |  MESSAGE  
=================================================
          |           |             |          


 
Les 3 premières colonnes représentent la PK (ma classe Identifier)
La 3ième colonne correspond à la sous-classe ObjectType (fille de Identifier)
La 4ième colonne est portée directement par MonEntite
 
 
MA QUESTION :
Comment mapper ça dans mon .hbm.xml ????
 
passer par un UserType ?
oui mais pas moyen de mapper ça dans un Id :/
(ou du moins je n'ai pas trouvé :( )
 
 
 
Merci d'avance pour votre aide  :jap:

Reply

Marsh Posté le 08-06-2011 à 18:40:16   

Reply

Marsh Posté le 08-06-2011 à 20:37:48    

Bon j'ai rien dit j'ai trouvé la solution ce soir avant de partir... toute conne d'ailleurs : en fait rien n'empêche de déclarer un Id avec un UserType en spécifiant les multiples colonnes, de cette manière :

Code :
  1. <class name="MonEntite">
  2.    <id name="id"
  3.        type="com.xxx.yyy.IdentifierType">
  4.          <column name="APP_CODE"/>
  5.          <column name="VERSION"/>
  6.          <column name="TYPE_NAME"/>
  7.    </id>
  8.    <property
  9.        name="message"
  10.        type="String"
  11.        column="MESSAGE" />
  12. </class>


 
 
la classe IdentifierType implémente UserType (je posterai un contenu générique demain)
 
 
 
Bref, je ne sais pas ce qui m'a pris de me dire que ce n'était pas possible de faire simple (et donc pourquoi je ne trouvais pas de solution compliquée  :D )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed