先说一下结构吧。。我有一个article实体类,和一个info实体类,这两个类配置了一对一关联的代码如下:
<hibernate-mapping>
<class name="cn.zzzzbw.blog.domain.Article" table="article">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="title" column="title" type="java.lang.String" not-null="true"/>
<property name="content" column="content" type="java.lang.String" not-null="true"/>
<property name="mdStorage" column="mdStorage" type="java.lang.String"/>
<property name="category_id" column="category_id" type="int"/>
<many-to-one name="info" column="info_id" class="cn.zzzzbw.blog.domain.Info" cascade="all" unique="true"
lazy="false"/>
<many-to-one name="archives" column="archives_id"
class="cn.zzzzbw.blog.domain.Archives"
cascade="all" lazy="false">
</many-to-one>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="cn.zzzzbw.blog.domain.Info" table="info">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="display" column="display" type="boolean"/>
<property name="click" column="click" type="int"/>
<property name="createDay" column="createDay" type="java.lang.String" length="128"/>
<property name="editDay" column="editDay" type="java.lang.String" length="128"/>
<one-to-one name="article" class="cn.zzzzbw.blog.domain.Article" property-ref="info"/>
</class>
</hibernate-mapping>
然后我的dao实现类是继承于HibernateDaoSupport的,当我要删除一个持久化对象时,我用:
public void delete(Article article) {
this.getHibernateTemplate().delete(article);
}
删除的时候,只会删除数据库中的对应的article,与之关联的info不会被删除,然而当我用
public void delete(int id) {
Article sqlArticle = this.getHibernateTemplate().get(Article.class, id);
this.getHibernateTemplate().delete(sqlArticle);
}
这样删除的时候,就可以同时删除了和这个article关联的info,这是为什么啊?
级联删除...同时删除有映射关系表中的数据
级联删除是:删除一个对象的同时也会删除所有跟该对象有关联关系的对象。
第一种 直接删除一个对象,没有级联;
第二种 先根据id查出该对象,然后删除,应用了级联删除;
至于有没有配置级联删除,应该去看 HibernateDaoSupport 内部实现。