Hibernate удаление связанных таблиц с помощью удаления HQL? - PullRequest
1 голос
/ 26 марта 2012

Я новичок в спящем режиме.Это мое основное сопоставление bean visaInquiry, которое имеет много взаимосвязей «один ко многим» и «многие ко многим» в спящем режиме.Теперь для удаления записи я использую этот запрос

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

Но проблема в том, что он удаляет только записи из основной таблицы. И все данные в других таблицах остаются такими, как есть.Я хочу удалить все записи из всех связанных сторонних таблиц .. Пожалуйста, помогите?

    <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 = "persist" я получаю ошибку во времявставки.и cascade = "all" не проблема во время вставки, но когда я удаляю, удаляется запись только из одной таблицы.все связанные таблицы сохраняются как есть.

Ответы [ 2 ]

0 голосов
/ 16 июня 2017

Запросы на удаление HQL (массовое удаление) не каскадируются.

Согласно спецификации JPA ( JSR338 ), раздел 4.10:

Операция удаления применяется только к объектам указанного класса и его подклассов. Это не каскад связанные лица.

Поэтому, когда вам нужно удалить с помощью каскада, используйте Session.delete. Обратите внимание, что Hibernate поддерживает удаление отдельных объектов, что невозможно в обычном JPA.

0 голосов
/ 28 марта 2012

Я пробовал это, и он прекрасно работает для меня .. int id = Integer.parseInt (queryId);VisaInquiry inq = (VisaInquiry) session.load (VisaInquiry.class, id);session.delete (ППК);session.flush (); * +1001 *

...