Hibernate One-To-many-Unidirektional auf eine vorhandene DB

Stack Overflow Hallo Experten, ich brauche Eure expertice:

Ich versuche, mit Hibernate auf eine Vorhandene DB.
Derzeit im Versuch zum laden eines User-Objekts und eine Liste der UserData-Objekte, die entlang gehen.

in der DB die (vereinfachte) layout

|    User      |      |          UserData               |
----------------      -----------------------------------
uid | username |      | uid | parentuid | field | value | 

So dass jeder Benutzer-Objekt entspricht allen UserData-Objekte, wo UserData.parentuid = User.uid.

Meiner User-Klasse mapping-Datei

    <class name="com.agetor.commons.security.User" table="ac_users">
    <id name="uid" column="uid" type="long" >
        <!--<generator class="native"/>-->
    </id>
    <property name="username" column="username" />   

    <list name="fieldData" cascade="all">
        <key column="parentuid" not-null="true" />
        <index column="parentuid" />
        <one-to-many class="com.agetor.commons.fields.FieldData"/>
    </list>

</class> 

Mu UserData mapping-Datei

    <class name="com.agetor.commons.fields.FieldData" table="ac_userdef_data">
    <id name="uid" column="uid" type="long" >
    <!--<generator class="native"/> -->
    </id>
    <!--<property name="parentuid" column="parentuid" />   -->
    <property name="fieldname" column="fieldname" />
    <property name="value" column="value" />
</class>

Bisher habe ich versucht, viele verschiedene Konfigurationen und alle von Ihnen haben verschiedene Grade der failue. Der code hier eingefügt, funktioniert nicht.

  • Die parentuid Eigenschaft ist auskommentiert, weil Hibernate gibt eine "Wiederholte Spalte mapping" Fehler sonst.
  • Momentan ist es noch eine "Wiederholte Spalte "Zuordnung" auf das uid-Feld, die ich für <list-index />
  • Verstehe ich nicht, wo ich festlegen, dass der UserData.parentuid ist der fremde Schlüssel, und dass die Liste verwenden sollten Benutzer.uid als Schlüssel.

Ich hoffe jemand ist in der Lage zu helfen.


Wenn Sie definieren sowohl eine Eins-Zu-Viele und Viele-Zu-Eins, bedeutet dies nicht machen es Bi-Direktional?
Das aktuelle Modell ist Unidirektional und UserData keinen Bezug zum Benutzer. Ihre Anmeldung fehlschlägt, weil der Ruhezustand nicht finden konnten, einen get-oder set-Methode für den Benutzer auf UserData.

Ist es impliziert, dass dieser code verwendet den Benutzer.uid als Schlüssel und gleicht diese gegen die UserData.parentuid Spalte? Oder ist diese Tatsache angegeben woanders?

  <list name="fieldData" inverse="true">
    <key column="parentuid" not-null="true" />
    <one-to-many class="com.agetor.commons.fields.FieldData"/>
  </list>

Ich bin immer noch lernen, Hibernate und arbeitet mein Weg durch die Dokumentation und die Beispiele, die ich finden kann.

Schreibe einen Kommentar