2013-03-19 69 views
0

我需要更好地理解hibernate的這種行爲,並想知道我是否可以在這件事上得到一些啓示。 有兩個對象ContactAction具有一對多關係,即一個Contact可以有許多與它們相關聯的Action。 我想知道的是,當我將Contact存儲到數據庫時,如何存儲Action的集合(這是Contact的屬性)。 目前我正在做的是先儲存Contact,然後儲存Action。 以下是我的代碼: 模型對象:休眠,在一次操作中保存一個集合屬性

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映射:

<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 
     } 

    } 
} 

見,有兩個操作導致保存Action s,因爲它們屬於Contact,我相信當Contact已保存,Action的集合也必須保存。 請讓我知道這樣做的正確方法。由於

回答

1

嘗試設置

<set cascade="all"....

這樣,hibernate會保存操作時要調用保存在您的聯繫人實體設置。

請參閱this回答詳情。

另外,參見the documentation