0

親と子の 2 つのエンティティがあります。親は子を 1 つだけ持つことができるため、子の外部キーが含まれます。

すべての ID は、IdentifierGenerator のカスタム実装によって生成されます。一部のエンティティでは、ID を手動で設定したいと考えています。そこで、カスタム IdentifierGenerator で id フィールドの値を取得する方法を見つけました。

問題は、子の ID が以前に定義されていて、子がまだ永続化されていない場合、ジェネレーターが呼び出されないことです。

親-hbm.xml ファイル:

<hibernate-mapping default-cascade="all">
    <class name="com.ParentImpl" table="Parent" dynamic-insert="false" dynamic-update="false">
        <cache usage="read-write" />
        <id name="id" type="java.lang.Long" unsaved-value="null">
            <column name="ID" sql-type="BIGINT"/>
            <generator class="com.EntityIdGenerator">
            </generator>
        </id>
        <many-to-one name="child" class="com.ChildImpl" foreign-key="CHILDSC" cascade="all" lazy="false" fetch="select">
            <column name="CHILD_FK" not-null="true" sql-type="BIGINT" unique="true"/>
        </many-to-one>
    </class>
</hibernate-mapping>

child-hbm.xml ファイル:

<id name="id" type="java.lang.Long" unsaved-value="null">
    <column name="ID" sql-type="BIGINT"/>
    <generator class="com.EntityIdGenerator">
    </generator>
</id>

この動作を変更するにはどうすればよいですか?

何か案が ?

前もって感謝します。

4

2 に答える 2

0

ジェネレーターを使用する代わりに、手動 ID 用に構成してから、手動で割り当てられていない場合に値を生成するインターセプターまたはイベント リスナーを使用してみましたか?

サラ

于 2013-09-06T02:28:41.473 に答える