Hibernate >> "duplicate mapping for property..."

CHaoSlayeR

Erfahrenes Mitglied
Hallo zusammen,

also, bisher hat alles wunderbar geklappt mit Hibernate und meiner DB. Nun ist mir allerdings eine Redundanz aufgefallen, die eigentlich nicht sein sollte. Es geht dabei um 3 Tabellen:

"domain", "role" und "rolesinternal"

wobei die "rolesinternal" dazu benutzt werden soll um herauszubekommen, welche "roles" in welcher "domain" stecken und umgekehrt, also eine bidirektionale Verbindung sein soll. Nun habe ich denn auf beiden Seiten (in "role" und in "domain") ein many-to-many machen lassen, auf einer Seite "inverse" auf "true" gesetzt und alles korrekt verbunden. Dabei habe ich in der Klasse für "role" einfach das bisher redundante "domain" (was bislang noch eine eigene Spalte bekommen hatte in der "role"-Tabelle) Hibernate-seitig ersetzt.

Soweit so gut...

"hibernatedoclet" läßt sich darauf auch scheinbar ohne Probleme ausführen. Dann allerdings, wenn ich die generierten XML's mappen lassen per "createTable", dann bekomme ich einen Mapping-Error: "net.sf.hibernate.MappingException: duplicate mapping for property: #######.RoleImpl.domain".

Wenn ich dann in die zuvor generierte ###.hbm.xml schaue, dann steht dort vor dem entsprechenden "many-to-many" ein "many-to-one" vor dem "set", wo es nichts zu suchen hat! Außerdem kann ich in meiner Klasse nirgends etwas finden, was auch nur ansatzweise darauf hindeutet, dass Hibernate an der Stelle ein "many-to-one" einfügen will!

Hier mal zur besseren einsicht die Code-Ausschnitte:


Klasse für "domain" (hier ist alles OK laut mapping):
Code:
    /**
     * @hibernate.set
     * table="rolesinternal"
     *
     * @hibernate.collection-key
     * column="DOMAINID"
     *
     * @hibernate.collection-many-to-many
     * column="ROLEID"
     * class="..."
     *
     *
     */
    private Set getRolesInternal() {
        return roles;
    }

    private void setRolesInternal(Set roles) {
        this.roles = roles;
    }


Klasse für "roles":
Code:
    /**
     *
     * @hibernate.set
     * table="rolesinternal"
     * readonly="true"
     * inverse="true"
     *
     * @hibernate.collection-key
     * column="ROLEID"
     *
     * @hibernate.collection-many-to-many
     * class="..."
     * column="DOMAINID"
     */
    public Domain getDomain() {
        return domain;
    }

    public void setDomain(Domain d) {
        this.domain = d;
    }


generierte fehlerhafte ... .hbm.xml:
Code:
        <many-to-one
            name="domain"
            class="..."
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="domain"
        />

        <set
            name="domain"
            table="rolesinternal"
            lazy="false"
            inverse="true"
            cascade="none"
            sort="unsorted"
        >

              <key
                  column="ROLEID"
              >
              </key>

              <many-to-many
                  class="..."
                  column="DOMAINID"
                  outer-join="auto"
               />

        </set>
 
Zurück