Frage

ich eine Zusammenfassung Klasse haben, die eine Liste von Eigenschaften enthält. Eine Qualität enthält einen String-Namen und int-Wert. Diese Daten werden in einer denormalisierter db Struktur gespeichert ist, eine Tabelle nur, sowohl für Zusammenfassung und Qualität.

Qualitäts Tabelle:

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

Für jede Qualität Namen & Wert-Paare, ein neues Qualitätsobjekt muss in der Zusammenfassung Klasse eingefügt werden.

Wie dies in Hibernate zur Karte (xml Hibernate Mapping)?

War es hilfreich?

Lösung

Es ist nicht klar, wie Quality Objekte müssen in der Summary Halter Klasse „eingeführt“ werden, aber ich denke, dass ein benutzerdefinierten Benutzertyp (entweder o.h.u.UserType oder o.h.u.UserCollectionType ) ist der Weg hier zu gehen.

Im Abschnitt 5.2.3. Benutzerdefinierte Werttypen in der Dokumentation, um weitere Informationen (es gibt nicht viel über die Zuordnung zu sagen, einfach geben Sie Ihren individuellen Benutzertyp als type in der Abbildung).

Andere Tipps

Ich schaffte es mit einer benutzerdefinierten CompositeUserType Implementierung zu beheben. Die Mapping-Datei sieht wie folgt aus:

<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>

Die returnedClass im CompositeUserType ist List.class, die nullSafeSet Methode, um die Sammlung als Wertargument wird. Es ist nur eine Frage der Werte aus der Liste bekommen und sie auf die Parameter in der vorbereiteten Anweisung zuweisen. (Und Füllung mit null, wenn Werte in der Liste der Eigenschaften fehlen).

Die nullSafeGet Methode ist easyer. Ich erstelle gerade ein neues Arraylist, in der neuen Qualitätsobjekte mit Werten aus der resultset eingefügt werden.

Ich kann ein vollständiges Beispiel bei Interesse hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top