0

この休止状態の動作をよりよく理解する必要があり、問題を明らかにできるかどうか疑問に思っています。2 つのオブジェクトがContactありAction、1 対多の関係があります。つまり、1つのオブジェクトに複数の を関連付けるContactことができます。Action私が理解しようとしているのは、データベースに保存するときにActions (のプロパティ) のコレクションを保存する方法です。現時点で私がやっていることは、最初に sを保存してから s を保存することです。以下は私のコードです: モデルオブジェクト:ContactContactContactAction

public class Contact  implements Serializable{
    private Integer contactID;
    private String givenName;
    private String familyName;
    private Set<Action> actionSet = new HashSet<Action>();
}
public class Action  implements Serializable{
    private Integer actionID;
    private String actionNote;
    private Contact contact;
}

休止状態のマッピング:

<hibernate-mapping package="com.hibernate.model" schema="hibernatedb">
<class name="Contact" table="CONTACT">
    <id column="CONTACT_ID" length="500" name="contactID">
        <generator class="increment" />
    </id>
    <property column="GIVEN_NAME" generated="never" lazy="false" length="100" name="givenName" />
    <property column="FAMILY_NAME" generated="never" lazy="false" length="100" name="familyName" />
    <!-- one to many mapping with Action -->
    <set inverse="true" lazy="false" name="actionSet" sort="unsorted">
        <key column="CONTACT_ID" />
        <one-to-many class="com.hibernate.model.Action" />
    </set>

</class>
</hibernate-mapping>

 <hibernate-mapping package="com.hibernate.model" schema="hibernatedb">
<class name="Action" table="ACTION">
    <id column="ACTION_ID" length="500" name="actionID">
        <generator class="increment" />
    </id>
    <property column="ACTION_NOTE" type="string" name="actionNote" />
    <!-- many to one mapping with Contact -->
    <many-to-one name="contact" column="CONTACT_ID"
        class="com.hibernate.model.Contact" lazy="false" cascade="save-update" />
</class>
</hibernate-mapping>

これは私が現時点でそれを保存しようとしている方法です:

public class ContactServiceImpl implements ContactService{
    @Override
    public void addContacts(Contact contact) {

        contactDAO.addContact(contact);//saving the contact;
        if((contact.getActionSet()!=null)&&(contact.getActionSet().size()>0)){
            actionService.addAllActions(contact,contact.getActionSet());//saving actions, associated with the contact
        }

    }
}

s の保存につながる操作が 2 つありますAction。これらは のプロパティであるContactため、 を保存するときContactは、 のコレクションActionも保存する必要があると思います。正しいやり方を教えてください。ありがとう

4

1 に答える 1

1

設定してみてください

<set cascade="all"....

このように、hibernateは、Contactエンティティでsaveを呼び出しているときに、アクションセットを保存します。

詳細については、この回答を参照してください。

また、ドキュメントを参照してください。

于 2013-03-19T19:48:39.437 に答える