a表(id,ssbm,name) id是主键
b表(id,rydm,name,ssbm) id是主键
a,b表是一对多关系,通过ssbm关联,但是此两表的ssbm不是外键
给a表建立hibernate映射<hibernate-mapping
>
    <class
        name="com.spring.model.bean.DepartmentBean"
        table="a"
    >
        <id
            name="id"
            column="id"
            type="int"
            unsaved-value="0">
            <generator class="increment">          
            </generator>
        </id>
        <property
            name="ssbm"
            type="java.lang.String"
            update="true"
            insert="true"
            column="ssbm"
        />
        <property
            name="name"
            type="java.lang.String"
            update="true"
            insert="true"
            column="name"/>
       <set
            name="loginbean"
            lazy="true"
            inverse="false"
            cascade="all"
            sort="unsorted" >
            <key
                column="ssbm" >
            </key>
            <one-to-many
                  class="com.spring.model.bean.LoginBean" />
        </set>
    </class>
</hibernate-mapping>b表建立hibernate映射<hibernate-mapping
>
    <class
        name="com.spring.model.bean.LoginBean"
        table="b">
        <id
            name="id"
            column="id"
            type="int"
            unsaved-value="0">
            <generator class="increment"> 
            </generator>
        </id>
        <property
            name="name"
            type="java.lang.String"
            update="true"
            insert="true"
            column="name"/>
            <property
            name="yhdm"
            type="java.lang.String"
            update="true"
            insert="true"
            column="name"/>
        <many-to-one
            name="departmentBean"
            class="com.spring.model.bean.DepartmentBean"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            property-ref="ssbm"
            column="ssbm"/>
    </class>
</hibernate-mapping>这是我建立的双向多对一关联,我想应该没问题的吧
我现在想通过删除a表的一条记录,级联删除b表对应的记录
其代码如下:
Session session = this.getSession();
Query query = session
.createQuery("delete from DepartmentBean where ssbm=:ssbm");
query.setString("ssbm", s_ssbm);
query.executeUpdate();
session.close();
现在的问题是:a表是可以删除的,但是不能级联删除b表的记录,恳请帮助

解决方案 »

  1.   

    hibernate不会
    从JDBC上看从代码上看,级连删除可要可不要外键,用同一个事务控制,先删除子表,再删除主表,
    从结构上说,外键是表与表的关系,有了外键你在删除的时候如果删除错了,会报错,外键是一个规范,让你必须执行的规范,在开发的时候用外键,有时候会带来一些麻烦,不过还是支持用外键的.
      

  2.   

    用了Hibernate为什么还用delete from 而不是DAO来删呢?
      

  3.   

     <one-to-many
                      class="com.spring.model.bean.LoginBean" /> -> <one-to-many
                      class="com.spring.model.bean.LoginBean"  cascade="true"/> 
      

  4.   

    错了,应该是:
    <one-to-many
                      class="com.spring.model.bean.LoginBean"  cascade="delete-orphan"/> 或者
    <one-to-many
                      class="com.spring.model.bean.LoginBean"  cascade="all"/>