Bonjour,

Dans le cadre d'un gros projet d'évolution, j'ai dû intégrer l'utilisation d'hibernate (3.2) au sein de mon application.
Le framework hibernate remplace désormais l'utilisation de Connexion JDBC directe via Statement, Resultset,...
Bref, hibernate est en place.

Cependant, lors de la récupération des valeurs de chaque champs, hibernate ne supprime pas les espaces inutiles.

Par exemple imaginons une table POSTE avec les champs suivant :
- ID_POSTE : NUMBER(8)
- INTITULE_POSTE : CHAR(30)
- DESCRIPTION_POSTE : CHAR(100)

Le fichier de mapping serait alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
	<class name="Poste" table="POSTE">
 
		<!-- Clé -->
		<id name="idPoste" type="int" unsaved-value="0">
			<column name="ID_POSTE" sql-type="integer" not-null="true" />			
			<generator class="sequence">
				<param name="sequence">SEQ_ID_POSTE</param>
			</generator>
		</id>
 
		<property name="intitule">
			<column name="INTITULE_POSTE"/>
		</property>
 
		<property name="description">
			<column name="DESCRIPTION_POSTE"/>
		</property>
</class>
</hibernate-mapping>
Ceci est un exemple mais le nombre de classes et tables associées s'élèvent à une centaine.
Au moment du chargement de mes objets Poste, la valeur des champs "intitule" et "description" font toujours respectivement 30 et 100 caractères avec des espaces à la fin. Cette taille correspond à la taille des champs dans la base.
Cet "effet de bord" n'était pas présent avant l'utilisation d'hibernate car une fonction StringUtil.trim() était lors de l'instanciation des objets appliqué lors du parcours des resultset .

Ma question est : Existe t'il un moyen de supprimer les espaces inutiles lors de l'instanciation de mes objets par hibernate ?

Je tiens à préciser que pour des raisons de performances évidentes, et de propreté du code je ne peux pas parcourir l'ensemble de mes objets afin d'appliquer la fonction trim() sur les propriétés concernées. On perdrait d'ailleurs tout l'intérêt d'hibernate qui instancie automatique mes objets et rempli les champs.

Solutions envisagées :
1) J'ai pensé à effectuer un StringUtils.trim(...) dans les setters de mes propriétés mais je trouve cette méthode plutôt "bourrine" et quelque peu contraignante dans le cas où l'on souhaiterais réellement ajouter des espaces à la fin du champ.
2) Utilisation de formula trim(NomDuChamp) dans le fichier de mapping hibernate. Mais dans ce cas mes champs se retrouve en lecture seule.

Donc voilà, je suis un peu coincé. Si quelqu'un à une idée, une réponse, ou un avis.

Merci d'avance.