多对多hibernate xml配置

Rud*_*koŭ 6 java many-to-many hibernate

我有这样的数据库关系.
数据库方案

我希望有多对多的关系.之间PLAYERPRIVILEGE.你能帮我修一下我的.xml配置吗?

预期结果: 我希望能够执行:String hql = "from Player as p right outer join p.privilages as priv";

实际: 到目前为止我得到:

org.hibernate.MappingException:外键(FK8CD18EE134F64423:PLAYER [ID]))必须与引用的主键具有相同的列数(PRIVILAGE [ID,PRIVILAGE])

<hibernate-mapping>
    <class name="model.Privilage" table="PRIVILAGE">
        <id name="id" type="int" >
            <column name="ID"  precision="5" scale="0"/>
            <generator class="increment"/>
        </id>

        <set name="players" table="PLAYER"
             inverse="false" lazy="true" fetch="select" cascade="all" >
            <key>
                <column name="ID"/>
            </key>
            <many-to-many entity-name="model.Player">
                <column name="ID" not-null="true" />
            </many-to-many>
        </set>

        <property name="privilage" type="string">
            <column name="PRIVILAGE" length="20" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

<class name="model.Player" table="PLAYER">
    <id name="playerId" type="int" >
        <column name="ID" precision="5" scale="0"/>
        <generator class="sequence">
            <param name="sequence">PLAYER_SEQ</param>
        </generator>
    </id>
    <set name="privilages" table="PRIVILAGE"
         inverse="false" lazy="true" fetch="select" cascade="all" >
        <key>
            <column name="ID"/>
        </key>
        <many-to-many entity-name="model.Privilage">
            <column name="PRIVILAGE" not-null="true" />
        </many-to-many>
    </set>
    <!-- ... -->
</class>
Run Code Online (Sandbox Code Playgroud)

小智 3

您应该引用名为 PLAYER_PRIV 的多对多关系表:

<set name="privilages" table="PLAYER_PRIV"
     inverse="true" lazy="true" fetch="select">
    <key>
        <column name="ID"/>
    </key>
    <many-to-many entity-name="model.Privilage">
        <column name="PRIV_ID" not-null="true"/>
    </many-to-many>
</set>
Run Code Online (Sandbox Code Playgroud)

<set name="players" table="PLAYER_PRIV"
     inverse="false" lazy="true" fetch="select">
    <key>
        <column name="ID"/>
    </key>
    <many-to-many entity-name="model.Player">
        <column name="PLAYER_ID" not-null="true"/>
    </many-to-many>
</set>
Run Code Online (Sandbox Code Playgroud)