Hibernate学习笔记(一):级联删除

一对多的关系映射

在一的一方配置文件中将会配置set节点信息:

*.hbm.xml配置文件中set节点的属性:

Lazy:默认是true 即使用延迟加载,false表示即时加载;

Order-by:一的一方set集合内多的一方实体集合的排序方式 默认是主键排序 但可以更改;

Cascade:是否使用级联操作;配置方法:cascade的值有如下几个;

      all: 所有情况下均进行关联操作,即save-update和delete。

      none: 所有情况下均不进行关联操作。这是默认值。

      save-update: 在执行save/update/saveOrUpdate时进行关联操作。

      delete: 在执行delete 时进行关联操作。

      all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点

Inverse:反转。True表示由对方负责控制,false表示由自己控制。

级联删除:(在一的一方的配置文件中set节点进行配置)

  cascade的值使用all表示对所有操作都级联;

  把set节点的属性inverse的值改为true:

  就可以实现级联删除了,即删除一的一方后,在多的一方中引用到一的一方的主键的全部记录将会被删除

一对多中的‘一’

  vo

package org.sunny.shop.vo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Set;

public class Category {

    private int cid;
    private String cname;
    private Date dateinsert ;
    private Date dateupdate ;
  //利用集合来与多的一方关联
    private Set<Category2th> category2thSet;

    /*
   *
   *剩下的为setter、getter方法
   *
   */

}

  Category.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="org.sunny.shop.vo.Category" table="category">
        <id name="cid" column="cid">
            <generator class="identity" />
        </id>
        <property name="cname" />
        <property name="dateinsert" />
        <property name="dateupdate" />

        <!-- 配置二级分类的集合 -->
        <set order-by="csid" name="category2thSet" lazy="false" cascade="all" inverse="true">
            <key column="cid"/>
            <one-to-many class="org.sunny.shop.vo.Category2th"/>
        </set>
    </class>
</hibernate-mapping>

一对多中的‘多’

  vo

package org.sunny.shop.vo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;

public class Category2th {

    private int csid;
    private String csname;
    // 分类添加时间
    private Date dateinsert;
    // 分类更新时间
    private Date dateupdate;
    private Category category;
  //用vo类与一对多中的‘一’关联
    private Set<Product> productSet;

    /*
   *
   *剩下的是setter、getter方法
   *
   */
 }    

  Category2th.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="org.sunny.shop.vo.Category2th" table="categorysecond">
        <id name="csid" column="csid">
            <generator class="identity" />
        </id>
        <property name="csname"/>
        <property name="dateinsert" />
        <property name="dateupdate" />

        <!-- 二级分类与一级分类的关联 -->
        <many-to-one name="category" lazy="false" class="org.sunny.shop.vo.Category">
            <column name="cid"></column>
        </many-to-one>
    </class>
</hibernate-mapping>
时间: 2024-11-07 02:29:30

Hibernate学习笔记(一):级联删除的相关文章

hibernate学习笔记之三(一级缓存的使用和管理)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) 一级缓存 一级缓存生命周期很短,与session生命周期一致,所以一级缓存也叫session级缓存或事务级缓存.位于缓存中的对象处于持久化状态,它与表中的相关记录对应,session能够在某些时间点,按照缓存中持久化对象的属性来同步数据库中表的记录,这一过程称为清理缓存. 一级缓存实现原理. session缓存是由它的实现类sessionImpl中定义的一些集合属性构成的,原理是保证有一个引用在关联

Hibernate学习笔记(3)

两年前曾经学习过Hibernate,也通过博客将Hibernate的学习过程记录下来了,地址如下: Hibernate学习笔记(1) Hibernate学习笔记(2) 最近在复习Hibernate,在重新学习的过程中,有了一些新的体会和收获,现在将其总结成博客,供以后作为参考资料使用. 一.导入相应的jar包 目前Hibernate更新到了4.x版本,在官网下载后,找到lib文件加中的required文件夹,此外还需要额外导入log4j和数据库驱动包. 二.创建Hibernate配置文件 在sr

hibernate学习笔记之二(初识hibernate)

(hibernate学习笔记系列来自于 "疯狂Java" 视频学习) Hibernate概述 免费开源Java包,可以使程序和数据库的交互变得容易,并更加符合面向对象的设计. 持久化:将数据保存到数据库中 hibernate持久化类步骤 环境搭建 导入jar包,在hibernate包里的\lib\required文件夹里 导入mysql的JDBC驱动 将上述包添加到路径里面 编写持久化类 要求: 在持久化类中一般需要一个id,通常用Integer类型,这样之后操作会使用null,而不是

《Hibernate学习笔记之三》:联合主键的映射

<Hibernate学习笔记之三>:联合主键的映射 就如在前面所举的例子一样,是使用的id作为唯一的主键,一般情况下我们也只使用唯一的一个属性作为主键,但是在实际中,我们可能会遇到几个属性作为主键的情况,因此,在本篇博文中,就来介绍下,联合主键的映射关系应该如何来做?? 联合主键的映射有两种方式来进行实现. 1.使用映射文件 XXX.bhm.xml 2.使用Annotation Hibernate首先需要使用联合主键的实体类必须实现Serializable接口,即为了使序列能够被序列化进行传输

hibernate学习笔记之三(单条记录的增删改查)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) 保存用户 session.save(person); session.persist(person); 查询用户 load(Class theClass,Serializable id) get(Class theClass,Serializable id) 修改用户 session.update(person) session.merger(person); 保存或修改用户 session.sav

《Hibernate学习笔记十一》:树状结构设计

<Hibernate学习笔记十一>:树状结构设计 这是马士兵老师讲解Hibernate的一个作业题,树状结构设计,这是一个比较典型的例子,因此有必要写篇博文记录下. 树状结构的设计,它是在同一个类中使用了多对一(ManyToOne)和一对多(OneToMany). 在完成这个题目我们应该按照如下的步骤进行: 1.先思考数据库的模型应该是什么样的?? 数据库中的模型应该如下:即存在id p_id 2.思考面向对象的模型,及如何来进行映射??? 根据数据库中表的特点,对象应该有id name;由于

Hibernate单向多对一级联删除引发的问题

Hibernate单向多对一在级联删除时,会出现一些问题. 下面模拟我遇到的问题: 这次模拟与之前的一次模拟方法一直,博客:http://blog.csdn.net/openjdk8/article/details/38424403 模拟场景:有一个部门表t_dept,职位表t_position. 需求:当删除部门表时,不管职位表有没数据,照样删除.删除职位表就直接删除. 1,建表: 建表: t_dept::部门表 t_position:职位表 CREATE TABLE t_dept(    d

《Hibernate学习笔记八》:组件映射

<Hibernate学习笔记八>:组件映射 前面介绍了一对一的单向.双向外键关联,例如,学生证和学生是一个一对一的关系.这篇博文主要是介绍下组件映射,即一个是另一个的一部分,例如,学生证的信息也可以作为学生信息的一部分,即在数据库中只存在学生一个表,而不是有学生和学生证两个表,并且这两个表中有一个一对一的关联关系. 如下: 有人或许会说,那我们就将学生和学生证的信息写在一个类中,则就不需要组件映射了,确实可以这样,但是,根据类的设计原则,我们一般都会将其设计为两个类,然后将学生证的信息作为一个

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

hibernate学习笔记之四(Hibernate中的类型)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) Hibernate中的类型 在*.hbm.xml文件中,<property name="password" column="t_pass">,hibernate根据type转换将java转换成hibernate类型,然后再转换成SQL类型,<property name="password" type="...&q