2010-01-24 69 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