2010-01-24 67 views
2

我有Country和State對象。我打算從國家到國家有單向的多對一關係。我不想存儲任何對國家/地區中的國家/地區的引用,我已經在下面定義了映射。當我刪除一個國家對象時,所有國家都被刪除!當一個孩子被刪除時,多對一的休眠會刪除所有父母

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class 
     name="places.Country" 
     table="COUNTRY" 
     dynamic-update="true"> 

     <!-- Technical ID --> 
     <id name="name" type="string" unsaved-value="new" column="COUNTRY_NAME"> 
     </id> 

     <!-- Properties --> 
     <property name="commonName" 
      column="COMMON_NAME" 
     /> 
     <property name="iso2Code" 
      column="ISO2_CODE" 
     /> 
     <property name="iso3Code" 
      column="ISO3_CODE" 
     /> 
     <property name="isoNumeric" 
      column="ISO_NUMERIC" 
     /> 
     <property name="ituCode" 
      column="ITU_CODE" 
     /> 
     <property name="ianaCode" 
      column="IANA_CODE" 
     /> 
    </class> 
    <class 
     name="places.State" 
     table="STATE" 
     dynamic-update="true"> 

     <!-- Technical ID --> 
     <id name="name" type="string" unsaved-value="new" column="STATE_NAME"> 
     </id> 

     <!-- Properties --> 
     <property name="code" column="STATE_CODE" 
     /> 

    <many-to-one name="country" column="COUNTRY" not-null="true" cascade="none" 
     class="places.Country" 
    />   
    </class> 

</hibernate-mapping> 
+1

你可以顯示代碼在哪裏執行刪除? –

回答

1

提供的映射看起來很好。事實上,正是使用映射執行以下代碼:

Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
session.beginTransaction(); 

State aState = (State) session.load(State.class, stateId); 
session.delete(aState); 

session.getTransaction().commit(); 

生成以下的輸出:

 
... 
Hibernate: select state0_.STATE_NAME as STATE1_1_0_, state0_.STATE_CODE as STATE2_1_0_, state0_.COUNTRY as COUNTRY1_0_ from STATE state0_ where state0_.STATE_NAME=? 
Hibernate: delete from STATE where STATE_NAME=? 
3270 [main] INFO org.hibernate.impl.SessionFactoryImpl - closing 

事情正在按預期工作,我的國家仍然存在。

也許顯示一些代碼?

+0

帕斯卡,非常感謝! – Prashant