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表的记录,恳请帮助
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表的记录,恳请帮助
从JDBC上看从代码上看,级连删除可要可不要外键,用同一个事务控制,先删除子表,再删除主表,
从结构上说,外键是表与表的关系,有了外键你在删除的时候如果删除错了,会报错,外键是一个规范,让你必须执行的规范,在开发的时候用外键,有时候会带来一些麻烦,不过还是支持用外键的.
class="com.spring.model.bean.LoginBean" /> -> <one-to-many
class="com.spring.model.bean.LoginBean" cascade="true"/>
<one-to-many
class="com.spring.model.bean.LoginBean" cascade="delete-orphan"/> 或者
<one-to-many
class="com.spring.model.bean.LoginBean" cascade="all"/>