Question

J'ai une classe Résumé qui contient une liste de qualités. Une qualité contient un nom de chaîne et de la valeur int. Ces données sont stockées dans une structure dénormalisé db, une seule table, à la fois sommaire et de la qualité.

Tableau Qualité:

id, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3

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

Comment mapper cette mise en veille prolongée en (mise en veille prolongée mapping XML)?

Était-ce utile?

La solution

On ne sait pas comment les objets Quality doivent être « insérés » dans la classe de porte-Summary mais je pense qu'un type d'utilisateur personnalisé (soit o.h.u.UserType ou o.h.u.UserCollectionType ) est le chemin à parcourir ici.

Reportez-vous à la section 5.2.3. types de valeur personnalisée dans la documentation pour plus de détails (il n'y a pas grand chose à dire au sujet de la mise en correspondance, il suffit de spécifier votre type d'utilisateur personnalisé comme type dans le mapping).

Autres conseils

Je réussi à le fixer avec une implémentation CompositeUserType personnalisée. Les regards de fichier de mappage 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>

Le returnedClass dans le CompositeUserType est List.class, le procédé de nullSafeSet obtient la collection comme argument de valeur. Il est juste une question d'obtenir les valeurs de la liste et les affecter aux paramètres dans l'instruction préparée. (Et remplissage avec null si les valeurs sont manquantes dans la liste de qualités).

La méthode de nullSafeGet est easyer. Je viens de créer une nouvelle liste de tableaux dans lesquels les nouveaux objets de qualité sont insérés avec les valeurs du ResultSet.

Je peux ajouter un exemple complet si vous êtes intéressé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top