Nous avons des colonnes avec des données qui doivent toujours être en majuscule pour assurer l'unicité. Je me demandais si Hibernate peut forcer toutes ces colonnes à majuscules via certains changements de fichier de configuration? P>
Nous utilisons réellement un USERType personnalisé pour les données de colonne Cryptage / décrypting pour une autre table, mais j'ai figuré que cela serait surchargé juste pour tout majuscule ... P>
Alternativement, je pensais à modifier les modèles de sorte que tous les getters / setters deviendront majuscules de la chaîne à venir et à partir. P>
Le scénario de cas pire (?) est de modifier la contrainte de colonne Oracle pour ignorer le cas tout en vérifiant l'unicité. P>
Toutes les pensées? P>
5 Réponses :
Je ne suis pas au courant des paramètres de configuration pour rendre cela possible. Cependant, vous pouvez essayer d'utiliser un Intercepteur pour corriger les données lors de l'insertion / mise à jour, comme:
J'ai un intercepteur contenant d'autres "trucs" que je peux laisser tomber votre idée dans ... Mais je ne vois pas d'écrire un tas de logique pour la dizaine de classes nécessitant des classes nécessitant une partie de leurs champs en majuscule.
Je suggère de vérifier cette page: http: // forum. springsource.org/archive/index.php/t-18214.html
Il a 3 façons différentes de le faire. Je crois que la voie la moins intrusive est la suivante: p>
Je me trompe peut-être, mais je ne pense pas que le tour de formule fonctionnera pour insertion ou mises à jour (je pense que Hibernate traite les champs de fomula comme transitoire et ne les sauvegez pas dans la base de données).
Plusieurs solutions: p>
USERType code> pour convertir l'attribut en majuscules. li>
- Utilisez un Intercepteur A> ou un Evénement auditeur A>. LI>
ol>
La solution n ° 1 est transparente pour le code, mais je ne suis pas un grand fan de déclencheurs "derrière tes dos" et je n'aime pas diffuser des règles d'entreprise partout. La solution n ° 3 et n ° 4 est dépendante de l'hibernation (mais cela pourrait ne pas être un problème cependant). La solution n ° 2 est la solution la plus simple et la plus portable si vous pouvez modifier le code. Ce serait mon choix s'il s'agit d'une option. P>
Je me penchais vers la n ° 2 aussi, mais je cherchais une configuration hibernée qui "travaillerait" "...
@T Reddy rien comme ça hors de la boîte Afaik.
J'ai décidé de mettre en place un Usertype ... c'est aussi proche d'une configuration hibernate que je peux obtenir ... Voici le code ...
<property name="serialNumber" type="model.UpperCaseUserType"> <column name="SERIAL_NUMBER" length="20" not-null="true" unique="true" /> </property>
Approche beaucoup plus propre:
@Column(name = "DUMMY") @ColumnTransformer(read = "UPPER(DUMMY)") private String dummy