我刚开始冬眠。这是我的大师visaInquiry bean映射,它通过hibernate进行了多个一对多和多对多的关系映射。现在要删除记录,我正在使用这个查询
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="persistent",我在插入时得到错误。cascade="all"在插入时没有问题,但当我删除时,只有一个表中的记录会被删除。所有相关的表记录保持原样。
我已经尝试过了,它对我来说很好。。int id=Integer.parseInt(inquiryId);VisaInquiry inq=(VisaInuiry)会话.加载(VisaInquiry.class,id);session.delete(inq);session.flush();
HQL删除查询(批量删除)不级联。
根据JPA规范(JSR338)第4.10节:
删除操作仅适用于指定类及其子类的实体。它不会级联到相关实体。
因此,当您需要使用级联进行删除时,请使用Session.delete
。请注意,Hibernate支持删除分离的实体,这在纯JPA中是不可能的。