Hibernate多对多配备加删除总结

Hibernate多对多配置加删除总结
经历了一段时间的hibernate的学习,感觉学到的东西蛮多的,现总结经验如下(主要考虑多对多及多对多的删除,网上这方面的资料比较少):

主表配置:

     <class name="com.google.musicstore.domain.CardMain" table="card">
        <id name="cardid" column="cardid">
            <generator class="native"/>
        </id>
        <property name="A" type="string" column="A"
        not-null="true"
        />       
        <property name="B" type="string" column="B"
        not-null="true"
        />  
           <property name="C" type="string" column="C"
        not-null="true"
        /> 
           <property name="D" type="string" column="D"
        not-null="true"
        /> 
           <property name="E" type="string" column="E"
        not-null="true"
        /> 
             
     <set name="notes" table="card_note"
     lazy="false"
     inverse="false"
     cascade="save-update"
     >
         <key column="cardid" not-null="true"/>
         <many-to-many class="com.google.musicstore.domain.Note" column="noteid"/>
     </set>
    </class>

      

从表:

        <class name="com.google.musicstore.domain.Note" table="note">
        <id name="noteid" column="noteid">
            <generator class="native"/>
        </id>
        <property name="note" type="string" column="note"
        not-null="true"
        />
        <list name="cards" table="CARD_NOTE" lazy="false" inverse="true" cascade="save-update"
   >
   <key column="noteid" />
   <list-index column="id" />
   <many-to-many class="com.google.musicstore.domain.CardMain"
    column="cardid" />
  </list>
    </class>

以上配置当删除主表示正常,删除从表会报错.

删除从表时要先删除级联关系,然后再删除从表

public void delete(Note note) {

Session session = null;

Transaction tx = null;

try {

session = hibernateManager.getSessionFactory().getCurrentSession();

tx = session.beginTransaction();

String sql="delete from CARD_NOTE where note_recordid='"+note.getRecordid()+"'";

System.out.println(sql);

SQLQuery query = session.createSQLQuery(sql);

query.executeUpdate();

session.delete(note);

tx.commit();

} catch (Exception e) {

log.error(this, e);

if (tx != null) {

tx.rollback();

}

throw new RuntimeException(e);

}

}