1 votes

Carte hibernée dénormalisée

J'ai une classe Résumé qui contient une liste de Qualités. Une qualité contient un nom de type String et une valeur de type Int. Ces données sont stockées dans une structure de base de données dénormalisée, une seule table, à la fois pour le résumé et la qualité.

Table de qualité :

id, certains produits, nom de la qualité1, valeur de la qualité1, nom de qualité 2, valeur de la qualité 2, nom de qualité 3, valeur de qualité 3

Pour chaque paire nom et valeur de qualité, un nouvel objet Qualité doit être inséré dans la classe Résumé.

Comment mapper ceci dans hibernate (mapping xml hibernate) ?

2voto

Pascal Thivent Points 295221

Il n'est pas clair comment Quality doivent être "insérés" dans le Summary mais je pense qu'un type d'utilisateur personnalisé (soit o.h.u.UserType o o.h.u.UserCollectionType ) est la solution à adopter ici.

Reportez-vous à la section 5.2.3. Types de valeurs personnalisées dans la documentation pour plus de détails (il n'y a pas grand chose à dire sur le mappage, il suffit de spécifier votre type d'utilisateur personnalisé en tant que type dans la cartographie).

0voto

Jurgen Hannaert Points 543

J'ai réussi à le corriger avec une implémentation personnalisée de CompositeUserType. Le fichier de mappage se présente comme suit :

<property name="qualities" type="com.foo.bar.QualityCompositeUserType">
        <column name="linkName1" />
        <column name="linkQuality1" />
        <column name="linkName2" />
        <column name="linkQuality2" />
        <column name="linkName3" />
        <column name="linkQuality3" />
</property>

La classe retournée dans le CompositeUserType est List.class, la méthode nullSafeSet reçoit la collection comme argument de valeur. Il s'agit juste de récupérer les valeurs de la liste et de les affecter aux paramètres dans l'instruction préparée. (et remplir avec null si des valeurs sont manquantes dans la liste des Qualités).

La méthode nullSafeGet est plus simple. Je crée simplement une nouvelle ArrayList dans laquelle de nouveaux objets Quality sont insérés avec les valeurs du jeu de résultats.

Je peux ajouter un exemple complet si cela vous intéresse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X