0

基本的に、私は2つのクラスPとM、およびそれらに対応するテーブルT_PとT_Mを持ち、それらは1対多の関係で結合され、1つのPにはMのセットがあります。このようなもの:

<class name="P" table="T_P">
    <set name="ms" cascade="all" lazy="false" inverse="true">
        <key column="P_ID" not-null="true" foreign-key="FK_M_P"/>
        <one-to-many class="M"/>
    </set>
</class>
<class name="M" table="T_M">
    <many-to-one name="p" column="P_ID" foreign-key="FK_M_P" class="P"
                 update="false" not-null="true" cascade="none"/>
</class>

ここで、P に変更を加え、Hibernate に DB を更新するように依頼します。Hibernate が T_P に 1 つ、T_M にいくつかの更新のバッチを実行する可能性が非常に高く、これらの Ms を変更しなかったため、後の部分は必要ないことを知っています。しかし、オブジェクトが切り離されているため、休止状態を更新する必要があると思いますすべての。

私の質問は、私の場合、Hibernate に部分的にのみ更新するように依頼し、過度の DB ヒットを行わないようにすることはできますか? または、これを最適化するための他の提案も高く評価されます。しかし、これは従来のプログラムであり、大幅な変更を行うことはできない場合があります。

4

1 に答える 1

0

マッピングに関する限りinverser="true"、双方向の関連付けでのみ機能します。 あなたの構成では、P in M のマッピングについて言及していません。

<class name="P" table="T_P">
<set name="ms" cascade="all" lazy="false" inverse="true">
    <key column="P_ID" not-null="true" foreign-key="FK_M_P"/>
    <one-to-many class="M"/>
</set>
</class>
<class name="M" table="T_M">
     /*mention mapping for P here, if you want to use inverse property properly*/
</class>

問題はcascade="all"マッピングが原因である可能性があります。cascade="save-update"コレクション用のマッピングに設定してみてください。

親子関係の簡単な/基本的な例を含む次のリンクを参照してください。

親子関係のマッピング例は以下の通りです。

/*parent contain set of child entity*/
<set name="children" inverse="true">
<key column="parent_id"/>
<one-to-many class="Child"/>
</set>


/*child has reference of parent*/
<many-to-one name="parent" column="parent_id" not-null="true"/>

これが問題の解決に役立つことを願っています。

于 2012-10-31T12:16:46.870 に答える