2010-01-24 3 views
2

나는 Country 객체와 State 객체를 가지고있다. 나는 한 국가에서 한 국가로 단방향의 다 대일 관계를 가질 생각이다. 아래에 매핑을 정의한 국가에 국가에 대한 참조를 저장하고 싶지 않습니다. 하나의 State 객체라도 삭제하면 모든 국가가 삭제됩니다!자식이 삭제 될 때 many to one은 모든 부모를 삭제한다.

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