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>
Hibernate学习笔记(一):级联删除的更多相关文章
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- Hibernate学习笔记
一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...
- Hibernate学习笔记(三)
我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...
- Hibernate学习笔记(四)—— 表与表的关系
一.一对多|多对一 1.1 关系表达 1.1.1 表中的表达 建表原则:在多的一方创建外键指向一的一方的主键. 1.1.2 实体中的表达 [客户实体] public class Customer { ...
- Hibernate学习笔记4
一.关于联合主键的映射测试实例 实体类: package com.***.comBineKey;public class Person { private Person_pk pk; private ...
- 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN
声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...
随机推荐
- 【POJ3468】【zkw线段树】A Simple Problem with Integers
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- newInstance()和new的区别
在初始化一个类,生成一个实例的时候:newInstance() 和 new 有什么区别?用newInstance与用new是有区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有 ...
- Winform使用DevExpress的WaitDialogForm画面
使用了DevExpress的WaitDialogForm 在应用程序加载开始时新建一个线程,并将loading画面show起来,在应用程序画面弹出前将该线程终止. 代码: private DevExp ...
- Js设置所有连接是触发/swt/的代码
Js设置所有连接是触发/swt/的代码 代码为: <script> var doca=document.getElementsByTagName('a'); for(var i=0;i&l ...
- 如何将eclipse里的项目发布到github
首先,给eclipse安装上EGit 在“Help > Install new software”中添加 http://download.eclipse.org/egit/updates 两个都 ...
- 浏览器JS报错Uncaught RangeError: Maximum call stack size exceeded?
JavaScript错误:Uncaught RangeError: Maximum call stack size exceeded 堆栈溢出 原因:有小类到大类的递归查询导致溢出 解决方法思想: A ...
- 【Windows核心编程】Windows常见数据类型
一,常见数据类型 WORD: 16位无符号整形数据 DWORD: 32位无符号整型数据(DWORD32) DWORD64: 64位无 ...
- pycharm console 控制台乱码的解决
- Oralce 字符串截取
update E_SYS_STRATEGY set sconfigvalue=(select Substr((select sconfigvalue from E_SYS_STRATEGY where ...
- Truck History(poj 1789)
Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for v ...