Bonjour à tous,
J'ai un ptit soucis en ce qui concerne le mapping de ma colonne Id. Je vous fait un topo de l'ensemble du probleme puis je vous dirai ce que j'ai deja essayé sans succes ^^
Le probleme consiste a mapper une colonne qui est taggé @Id avec une séquence présente sur ma BD (Oracle). Le probleme c'est que ma colonne est un VARCHAR(4) et pour des raisons de compatibilité de version entre la version que je developpe et la version précédente, je ne peux la changer et la passer en INTEGER.
Vous voyez donc je suppose le probleme arriver : un magnifique class cast exception quand je fait un code comme celui ci :
Je ne peux me permettre de passer myIdColonne en int (meme si cela fonctionne , le cast automatique est fait, soit par oracle soit par hibernate mais il est fait...) car je doit ajouter des zero a gauche pour cette Id (contrainte métier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Id @SequenceGenerator(name="XX_SEQUENCE",sequenceName="XX_SEQ") @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="XX_SEQUENCE") private String myIdColonne;
Exemple : 28 ==> 0028
Je me suis donc dit que j'allais faire un service qui faisait une requete native afin de récuperer le NEXT_VAL de ma séquence et pouvoir le transformer en String. Cela marche tres bien... le GROS problème c'est que cette requete rend mon service DEPENDANT de mon SGBD actuel (Oracle) car il va tapper dans une table spécifique d'oracle (DUAL) et mon cahier des charges me l'INTERDIT.
Voyez donc mon impasse... je me demandais donc s'il existait un moyen d'utiliser le tag @GeneratedValue mais d'intercepter a un moment donner la valeur pour la transformer en String et mettre les zéros a gauche, ou bien s'il existait des objets JPA qui permettent d'aller tapper dans une sequence (sans le tag @GeneratedValue) sans etre dépendant de la BD.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 StringBuffer sbRequete = new StringBuffer(128); sbRequete.append("select XX_SEQ.nextval from DUAL");
Je prend n'improte quel piste car la je dois avouer que je suis a court d'idée![]()
Partager