Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846

————————————————————————————————————————————————————————

Hibernate学习一:Hibernate注解CascadeType

博客分类:

hibernate

一.概念

  1. 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理。从中抽象出一个多对多的例子user-bar。
  2. 主控方user:多对多里面里面会有第三张表user_bar,由主控方维护这里面的外键记录,也就是创建一个user的时候必须指定其管理的bar。
  3. 被控方bar:没有权利更新外键记录。单独创建一个bar,不需要也不能指定其属于哪个user。

二. CascadeType

  1. CascadeType.MERGE:级联更新。创建一个user的时候,指定其管理哪些bar,如果某一个bar不存在,会在创建user的时候一起创建。
  2. CascadeType.PERSIST:级联保存。创建一个user的时候,指定其管理哪些bar,如果某一个bar不存在,抛出异常。所以指定其管理哪些bar必须是事先存在的。
  3. CascadeType.REMOVE:级联删除。删除一个user的时候,会删除它管理的bar,最终是user_bar里面删了,bar里面也删了。如果不指定CascadeType.REMOVE,只删user_bar里面。
  4. CascadeType.REFRESH:级联刷新。第一次查询某一user和第二次查询同一user之间,删除了某一bar,CascadeType.REFRESH是的任何时候看到的都是最新的记录(两次查询结果不一样)。
  5. CascadeType.ALL:包含以上所有。

三. 使用

  1. 根据具体的场景要指定不同的Type。
  2. user和bar之间的关系,并没有说user不存在了,网吧就不存在,所以不能用CascadeType.REMOVE。
  3. 保存一个user的时候,指定他能够管理的网吧必须是已经存在的,所以CascadeType.MERGE和CascadeType.PERSIST中用CascadeType.MERGE。

四. 吐槽

第一次接触CascadeType,去网上找资料的时候,NM,全部是一样的文章,甚至连错误都是一起copy过去的,真不赞同这样的学习方式。

时间: 2024-12-25 10:14:37

Hibernate学习一:Hibernate注解CascadeType的相关文章

Hibernate学习0.Hibernate入门

Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射. 3.连接java应用和数据库的中间件. 4.对JDBC进行封装,负责java对象的持久化. 5.在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑 Hibernate作用 Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关

Hibernate学习之Hibernate流程

Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作.除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:a)Config

码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable

近期我也是有点郁闷,究竟是程序中处理关联关系.还是直接使用外键处理关联关系呢?这个的说法不一致!程序中处理这样的关联关系的话.自己去维护这样的约束.这样的非常乐观的一种做法!或者是直接在数据库中处理这样的直接的外键关联,悲观的做法!刚刚看到个帖子.有的公司表中一个外键都没得.直接在程序中处理这样的关联关系.假设在Hibernate中处理外键关系的话.我们首先得有个主表的对象吧,然后在创建外键.感觉有点啰嗦.为啥不直接操作呢! 我仅仅要晓得你这个Id是外键即可了.各有各的说法.我想你也在思考这个问

Hibernate学习之类级别注解

? 版权声明:本文为博主原创文章,转载请注明出处 类级别注解: 1. @Entity 实体:表示映射实体类,使用@Entity时必须指定实体类的主键属性 @Entity(name="") name:可选,对应数据库中的一张表.若表名与实体名相同则可省略 2. @Table 表:表示实体类对应的数据库表的信息 @Table(name="", catalog="", schema="") name:可选,映射表的名称,默认表名与实

Hibernate学习之——Hibernate环境搭建

之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到的SSH框架(Struts+Spring+Hibernate),自己没有多少时间去好好学习,但是还是想把学到的东西记录下来. 一.Hibernate简介 1.什么是Hibernate? Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBatis,Nhib

Hibernate学习8—Hibernate 映射关系(多对多)

第二节:Hibernate 多对多映射关系实现 比如学生和课程是多对多的关系: 一个学生可以选多个课程: 一个课程可以被多个学生选中,所以是多对多的关系: 1,多对多单向实现: 单向关系: 这里通过学生可以获取这个学生选修的课程: 但是通过课程无法获取选修这门课程的学生: Student.java: package com.cy.model; import java.util.HashSet; import java.util.Set; public class Student { privat

Hibernate学习之hibernate执行顺序

Hibernate 执行的顺序如下:  (1) 生成一个事务的对象,并标记当前的 Session 处于事务状态(注:此时并未启动数据库级事务).  (2) 应用使用 s.save 保存对象,这个时候 Session 将这个对象放入 entityEntries ,用来标记对象已经和当前的会话建立了关联,由于应用对对象做了保存的操作, Session 还要在 insertions 中登记应用的这个插入行为(行为包括:对象引用.对象 id . Session .持久化处理类).  (3) s.evic

Hibernate学习5—Hibernate操作对象

第一节:Hibernate 中四种对象状态 删除状态:处于删除状态的Java 对象被称为删除对象.比如说session delete一个对象,这个对象就不处于session缓存中了, 已经从session的缓存中移出来了,只要提交事务的话,对应的数据库记录也会被删除. 游离状态:比如说session被关闭了,这里面的对象就变为游离状态了,游离状态和删除状态中的对象,如果不用的话,会被垃圾收集器回收. 几种状态之间的转化: 例子: public class StudentTest { public

Hibernate学习5—Hibernate操作对象2

第二节:Session 常用方法讲解 2)load和get()方法: 数据库中不存在与OID 对应的记录,Load()方法会抛出异常: load方法默认采用延迟加载,load出来的对象是一个代理类.开始并没有值,只有用到它的属性等的时候,才会去发出sql语句. 而get方法一开始就发出sql语句. 如果说获取一个对象是为了删除它,可以用load,因为只要获取个引用就行了. 如果说获取一个对象是为了访问它的属性,建议用get: @Test public void testLoadClass() {

Hibernate学习8—Hibernate 映射关系

第一节:Hibernate 一对一映射关系实现 假设一个用户对应一个地址: 1)按照主键映射: User.java: package com.cy.model; public class User { private int id; private String name; private Address address; public int getId() { return id; } public void setId(int id) { this.id = id; } public St