1

2 つのオブジェクト間で 1 対多のマッピングを作成しようとしています (Java で作業します)。オブジェクトをデータベースに保存できますが、それらの関係は保存できません。「AuthorizationPrincipal」というクラスがあり、「権限」のセットが含まれています

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="org.openmrs">

<class name="AuthorizationPrincipal" table="authorization_principal" lazy="false">


<id
    name="authorizationPrincipalId"
    type="int"
    column="authorization_principal_id"
    unsaved-value="0"
>
    <generator class="native" />
</id>

<discriminator column="authorization_principal_id" insert="false" />


<property name="name" type="java.lang.String" column="name" unique="true"
            length="38"/>


<many-to-one
    name="creator"
    class="org.openmrs.User"
    not-null="true"
/>

<property
    name="uuid"
    type="java.lang.String"
    column="uuid"
    length="38"
    unique="true"
/>
<property
    name="dateCreated"
    type="java.util.Date"
    column="date_created"
    not-null="true"
    length="19"
/>
<property
    name="policy"
    type="java.lang.String"
    column="policy"
    not-null="true"
    length="255"
/>

<!--  Associations -->

<set name="privileges" inverse="true" cascade=""
    table="authorization_principal_privilege" >
    <key column="authorization_principal_id" not-null="true"/>
    <many-to-many class="Privilege">
        <column name="privilege" not-null="true" />
    </many-to-many>
</set>

</class>

いくつかのチュートリアルと例に従って「set」タグを思いつきましたが、それでもデータベースに保存されません。

4

1 に答える 1

1

私が最初に間違っていると思うのは、関係をAuthorizationPrincipal エンティティからの多対多として定義したことです。質問で言うように、1対多の関係が必要です。

次に、次のようにセットを定義する必要があります。

<set name="privileges" inverse="true" cascade="all,delete-orphan">
    <key column="authorization_principal_id" not-null="true" />
    <one-to-many class="Privileges" />
</set>

この構成で十分です。

編集

構成が多対多の場合、 AuthoririzationPrincipalAuthoririzationPrincipal-Privilegesなどの権限との関係を示すテーブルが必要です。

ypur マッピングは次のようにする必要があります。

AuthorizationPrincipal で:

<set name="privileges" table="AuthoririzationPrincipal-Privileges">
    <key column="authorization_principal_id" />
    <many-to-many class="Privileges" column="privileges_id" />
</set>

そして特権で:

<set name="authorizationPrincipals" inverse="true" table="AuthoririzationPrincipal-Privileges">
    <key column="privileges_id" />
    <many-to-many class="AuthoririzationPrincipal" column="authorization_principal_id" />
</set>
于 2012-05-30T19:08:19.393 に答える