有两个pojo,Person:School关系为N:1
==================Person.xml====================
<class name="com.gl.test.Person" table="persons">
<id name="id" >
<generator class="identity" />
</id>
<property name="name" type="string" column="name"
length="20" />
<many-to-one name="school" column="school_id" class="com.gl.test.School" /> 
</class>
==================School.xml============================
<class name="com.gl.test.School" table="schools">
<id name="id">
<generator class="identity" />
</id>
<property name="name" type="string" column="name"
length="20"/>
<set name="persons" inverse="true" cascade="all-delete-orphan" lazy="true" > 
<key column="school_id"></key>  
<one-to-many class="com.gl.test.Person" />
</set>
</class>在删除School数据时,总是提示有外键约束,不能删除,正常应该级联删除。
查看Hibernate生成的mysql 的sql代码,没有on delete cascade ,个人直观感觉是这的原因.
不知道是Hibernate不能自动支持mysql的级联删除吗,还是配置的原因?请教各位高手!

<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="myeclipse.connection.profile">db</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver</property> <property name="hibernate.hbm2ddl.auto">update</property>

<mapping resource="com/gl/test/Person.hbm.xml" />
<mapping resource="com/gl/test/School.hbm.xml" />

</session-factory>

解决方案 »

  1.   

    schools.getPersons().remove(Persons); 
      

  2.   

    在person端加上cascade="delete"试试
      

  3.   

    为什么要级联删除?
    <set name="persons" inverse="true" cascade="all-delete-orphan" lazy="true" > 
         <key column="school_id"></key>  
         <one-to-many class="com.gl.test.Person" />
    </set>    关系维护端已经在多的一端了
    只能在多的一端进行删除!
      

  4.   

    用工具自动生成xml,看看有何不同?
      

  5.   

    如果 <set name="persons" inverse="true" cascade="all" lazy="true" > 
    方法不行的话(没理由)
       不如试试10楼的方法
      

  6.   

    <set name="persons" inverse="true" cascade="delete" lazy="true" > 
        <key column="school_id"/>
        <one-to-many class="com.gl.test.Person" /> 
    </set>    关系维护端已经在多的一端了 
    只能在多的一端进行删除!
      

  7.   

    如果把inverse="true"去掉也不对啊?Hibernate能够实现下面的这种需求吗?Person:School 为n:1
    删除一条person数据,对School没有影响,
    删除一条school数据,则对应的全部person全部自动删除Hibernate能够实现吗,我试验了好长时间,都不行。
    各位高手帮帮忙啊?