初识Hibernate——超简单双向级联操作
来源:互联网 发布:linux jdk gz 安装 编辑:程序博客网 时间:2024/06/16 01:55
工欲善其身必先利其器,在使用Hibernate之前做好准备工作
首先我们准备好数据源,一张班级表和一张学生表,班级对学生是一对多的,学生对班级是多对一的
再此已oracle数据库为例:
//创建用户create user xiaoping identified by "123"; //授权 grant connect,resource,dba to xiaoping; //切换到xiaoping用户conn xiaoping/123;//创建表create table grade(gid integer primary key,gname varchar2(50) not null);create table student(sid integer primary key,sname varchar2(20) not null,sex varchar2(2) ,gid integer not null);//建立外键关系alter table student add foreign key(gid) references grade (gid);
创建好数据库之后我们使用MyEclipse工具来添加关联映射关系
右键MyEclipse->Add Hibernate Capabilities...然后根据向导完成(此处省略上万字。。。)
然后我们可以在MyEclipse 的DB Browser视图下去右键创建数据库的连接,同样也是向导方式完成,这里附上常见数据库jdbc连接url
SQL Server 2005:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名称
SQL Server 2008:jdbc:sqlserver://localhost:1433;databaseName=数据库名称
MYSQL:jdbc:mysql://localhost:3306/数据库名称
Oracle(thin模式):jdbc:oracle:thin:@loaclhost:1521:数据库名称
DB2:jdbc:db2://localhost:5000/数据库名称
在生成的hibernate.cfg.xml中我们还可以加上一些常用配置项
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="hbm2ddl.auto">update</property>
public static void main(String[] args) {//加载配置文件Configuration cfg = new Configuration().configure();//获取会话工厂对象SessionFactory sessionFactory = cfg.buildSessionFactory();//通过会话工厂拿到一个会话,这个session可以看做是jdbc中Connection的作用Session session = sessionFactory.openSession();//开始一个事务Transaction transaction = session.beginTransaction();Grade g = new Grade();g.setGname("Class A");g.getStudents().add(new Student("张三丰"));//这里的保存班级对象的同时会将班级中的学生保存到session.save(g);//提交事务并关闭会话transaction.commit();session.close();}
届时,我们来看控制台
可以看到我们在save班级的同时也会保存班级中的学生
我们在配置级联关系时,如班级配置文件Grade.hbm.xml中会有一个学生的集合
在set标签中配置,其中有两个属性较为常用和关键(inverse & cascade)
Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。为了程序的效率有一端要设为true。
Cascade:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。
举例说明区别:删除“一”那一端一个对象O的时候,如果“多”的那一端的Inverse设为true,则把“多”的那一端所有与O相关联的对象外键清空;如果“多”的那一端的Cascade设为Delete,则把“多”的那一端所有与O相关联的对象全部删除。
最后附上一张图描述在Hibernate中对象在三种状态中的转换
0 0
- 初识Hibernate——超简单双向级联操作
- Hibernate学习之级联操作2——一对多双向自身关联关系
- Hibernate一对多双向级联操作
- Hibernate的Cascade——级联操作
- 【Hibernate学习】——级联操作
- Hibernate超简单多表操作
- 初识Hibernate(二)之简单操作
- Hibernate学习篇09——级联操作
- HIBERNATE中级联操作
- hibernate 级联操作
- hibernate的级联操作
- Hibernate级联操作Cascade
- hibernate级联操作详解
- Hibernate 级联操作 cascade
- hibernate 之 级联操作
- Hibernate级联操作
- Hibernate级联操作 注解
- hibernate的级联操作
- Android之context相关类图
- java网络编程(一)
- EventBus 3.0的用法详解
- 大华NVR WEB界面把玩
- BootStrap--CSS组件--字体图标(glyphicon)
- 初识Hibernate——超简单双向级联操作
- 解决移动段触摸滚屏也会触发click事件
- 多线程中handler和Message的用法
- MySQL错误代码对照大全
- 第十四节,Generator 函数
- git在本地仓库上的使用
- 使用 StatsD + Grafana + InfluxDB 搭建 Node.js 监控系统
- kinect2.0开发笔记(三) 获取红外图
- java 对象比较器重写Comparator