2012-03-26 3 views
1

나는 최대 절전 모드를 처음 사용합니다. 이것은 최대 절전 모드를 통해 많은 일대 다 및 다 대다 관계 매핑이있는 나의 마스터 visa 조회 빈 매핑입니다. 지금은이 쿼리hibernate 삭제 HQL을 사용하여 관련 테이블을 삭제 하시겠습니까?

Transaction ts=session.beginTransaction(); 
       String hql="delete from VisaInquiry inq where inquiryId="+inqId; 
       Query query=session.createQuery(hql); 
       query.executeUpdate(); 
       ts.commit(); 

그러나 문제를 사용하고있는 레코드를 삭제하면은 그대로 다른 테이블에있는 모든 데이터가 남아있는 주요 table.And에서 레코드를 삭제하는 것이 있습니다. 나는 모든 관련 외국 테이블에서 모든 기록을 삭제하고 싶습니다. 도와주세요?

<id name="inquiryId" column="inquiryId"> 
     <generator class="increment"/> 
    </id>   
    <property name="inquiryDate" type="date" column="inquiryDate"></property> 
    <property name="name" type="string" column="name"></property> 
    <property name="countryPreference" type="string" column="countryPreference"></property> 
    <property name="address" type="string" column="address"></property> 
    <property name="pnumberHome" type="string" column="pnumberHome"></property> 
    <property name="pnumberResi" type="string" column="pnumberResi"></property> 
    <property name="email" type="string" column="email"></property> 
    <property name="dob" type="date" column="dob"></property> 
    <property name="englishAblity" type="string" column="englishAblity"></property> 
    <property name="ieltsScore" type="string" column="ieltsScore"></property> 

    <property name="refusedVisa" type="string" column="refusedVisa"></property> 
    <property name="refusedCountry" type="string" column="refusedCountry"></property> 
    <property name="refusedTypeOfVisa" type="string" column="refusedTypeOfVisa"></property> 

    <property name="relativeAbroad" type="string" column="relativeAbroad"></property> 
    <property name="relativeCountry" type="string" column="relativeCountry"></property> 
    <property name="relativeStatus" type="string" column="relativeStatus"></property> 

    <property name="travellAbroad" type="string" column="travellAbroad"></property> 
    <property name="travleCountry" type="string" column="travleCountry"></property> 
    <property name="travelCountryVisaType" type="string" column="travelCountryVisaType"></property> 

    <property name="prefLevelCourse" type="string" column="prefLevelCourse"></property> 
    <property name="counselBy" type="string" column="counselBy"></property> 
    <property name="comeToKnow" type="string" column="comeToKnow"></property> 

    <property name="counselState" type="string" column="counselState"></property> 
    <property name="remarks" type="string" column="remarks"></property> 

    <set name="eduList" table="visaInquiry_education" cascade="persist" lazy="false"> 
     <key column="inquiryId"></key> 

     <many-to-many class="com.aems.beans.EducationQualification" column="educationId" unique="true"></many-to-many> 
    </set> 


    <set name="expList" table="visaInquiry_Experience" cascade="persist" lazy="false"> 
     <key column="inquiryId"></key> 
     <many-to-many class="com.aems.beans.Experience" column="expId" unique="true"></many-to-many> 
    </set> 

    <set name="childList" table="visaInquiry_Children" cascade="persist" lazy="false"> 
     <key column="inquiryId"></key> 
     <many-to-many class="com.`aems`.beans.Children" column="childId" unique="true"></many-to-many> 
    </set> 

    <many-to-one name="spouce" 
    class="com.aems.beans.Spouce" column="spouceId" cascade="persist" unique="true" lazy="false"/> 

캐스케이드

= 제가

삽입시에 오류가 "영속화". 그리고 cascade = "all"은 삽입 할 때 아무런 문제가 없지만 삭제할 때 하나의 테이블에서만 레코드가 삭제됩니다. 모든 관련 테이블 레코드는 그대로 남아 있습니다.

+0

나는 이것을 시도하고 나를 위해 잘 작동합니다. int id = Integer.parseInt (inquiryId); \t \t \t \t Visa Inquiry = (VisaInquiry) session.load (VisaInquiry.class, id); \t \t \t \t session.delete (inq); \t \t \t \t session.flush(); –

답변

0

나는 이것을 시도하고 그것은 나를 위해 잘 작동 .. int id = Integer.parseInt (inquiryId); VisaInquiry inq = (VisaInquiry) session.load (VisaInquiry.class, id); session.delete (inq); session.flush();

0

HQL 삭제 쿼리 (대량 삭제)를 계단식으로 사용하지 마십시오.

삭제 작업은 지정된 클래스와 그 서브 클래스의 개체에 적용 JPA 사양 (JSR338), 4.10 절에 따르면

. 관련 업체에 과 연결되지 않습니다.

캐스케이드로 삭제해야하는 경우 Session.delete을 사용하십시오. Hibernate는 분리 된 엔티티들의 삭제를 지원하는데, JPA에서는 불가능하다.