hibernate的基础学习--一对多关联
基本的用户和部门类,只有uuid和名称,没有其余字段。
配置文件
部门:
<?xml version="1.0" encoding="utf-8" ?>
<!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="hib.po.Dept" table="dept" schema="hibernatedb">
<!-- 类的唯一标示和表中的主键映射 -->
<id name="deptId" column="dept_id">
<!-- 主键生成策略:native(mysql自增) -->
<generator class="uuid"></generator>
</id> <property name="deptName" column="deptname"></property> <!-- 关系字段:用户 one2many
name:关联关系属性
class:关联关系属性的类型
column:指定生成表中的关系字段名称(外键名)
inverse="true":放弃维护关系功能
-->
<set name="users" inverse="false">
<!-- column: 用来对应 关联表(t_user)中的外键名称 -->
<key column="dept_id"></key>
<!-- class:关联关系属性(集合)中的元素的类型 -->
<one-to-many class="hib.po.User"/>
</set>
</class>
</hibernate-mapping>
用户:
<?xml version="1.0" encoding="utf-8" ?>
<!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="hib.po.User" table="user" schema="hibernatedb">
<!-- 类的唯一标示和表中的主键映射 -->
<id name="userId" column="user_id">
<!-- 主键生成策略:native(mysql自增) -->
<generator class="uuid"></generator>
</id> <!-- 普通属性和普通字段映射 -->
<property name="username" column="username"></property> <!-- 关系字段:部门 many2one
name:关联关系属性
class:关联关系属性的类型
column:指定生成表中的关系字段名称(外键名)
-->
<many-to-one
name="dept"
class="hib.po.Dept"
column="dept_id"
></many-to-one>
</class>
</hibernate-mapping>
基础的增删改查方法
/**
* @author nunu
* 测试hibernate OneToMany
*/
public class TestHibernateOneToMany { /**
* 添加用户
*/
@Test
public void addUser() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction();
User s1 = new User(null, "小小", null);
User s2 = new User(null, "小五", null);
session.save(s1);
session.save(s2); ts.commit();
session.close();
} /**
* 添加部门
*/
@Test
public void addDept() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction();
Dept dept1 = new Dept(null, "研发部", null);
Dept dept2 = new Dept(null, "人事部", null);
Dept dept3 = new Dept(null, "财务部", null);
session.save(dept1);
session.save(dept2);
session.save(dept3); ts.commit();
session.close();
} /**
* 从员工端维护关系:多端维护
*/
@Test
public void updateMany(){
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); User user1 = (User) session.get(User.class, "ff80808157c82de80157c82deb2d0000");
Dept dept1 = (Dept) session.get(Dept.class, "ff80808157c831050157c83106b10000");
System.out.println(dept1.getDeptName());
//从用户角度维护关系:将部门对象添加到用户中
user1.setDept(dept1); //最后加上
session.update(user1); ts.commit();
session.close();
System.out.println("====");
} /**
* 从一端维护关系
*/
@Test
public void updateOne() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); User user1 = (User) session.get(User.class, "ff80808157c831830157c83184a90000");
Dept dept1 = (Dept) session.get(Dept.class, "ff80808157c831050157c83106c40001");
System.out.println(dept1.getDeptName());
//从部门角度维护关系:将用户对象添加到部门中
Set<User> users = dept1.getUsers();
users.add(user1); dept1.setUsers(users); session.update(dept1); ts.commit();
session.close();
System.out.println("====");
} }
hibernate的基础学习--一对多关联的更多相关文章
- hibernate的基础学习--多表关联数据查询
Hibernate共提供4种多表关联数据查询方式 OID数据查询+OGN数据查询方式 HQL数据查询方式 QBC数据查询方式 本地SQL查询方式(hibernate很少用) 1.OID数据查询+OGN ...
- hibernate的基础学习--多对多关联
多对多采用学生老师模型进行测试 学生配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DOCTY ...
- java之hibernate之单向的一对多关联映射
这篇主要讲hiberante中的 单向一对多关联映射 1.在应用中,有时候需要从一的一端获取多的一端的数据.比如:查看某个分类下的所有书籍信息:查看某个订单下的所有商品等. 2.在一对多的关联关系中, ...
- hibernate的基础学习--一对一关联
一对一关系以丈夫和妻子模型 配置文件 妻子配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DO ...
- hibernate多对一和一对多关联
关联,是类的实例之间的关系,表示有意义和值得关注的连接. 多对一单向关联: 单向多对一:<many-to-one>定义一个持久化类与另一个持久化类的关联这种关联是数据表间的多对一关联,需要 ...
- hibernate(八)一对多关联
一.一对多单向关良 一对多单向关联与多对一相似 假设一个组有多个用户,即一(Group)对多(User) 需要在Group类中添加一个User类的Set集合(数据库中的用户不可能是重复的,所以要用Se ...
- hibernate的基础学习
工具类: public class H3Util { private static final SessionFactory sessionFactory = buildSessionFactory( ...
- Mybatis学习——一对多关联表查询
1.实体类 public class Student { private int id; private String name; } public class Classes { private i ...
- Hibernate非主键一对多关联。
Unit表 id,code User表 id,ucode ...@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ucode" ...
随机推荐
- 创建es索引-格式化和非格式化
创建es索引-格式化和非格式化 学习了:https://www.imooc.com/video/15768 索引有结构化和非结构化的区分: 1, 先创建索引,然后POST修改mapping 首先创建索 ...
- npm的常用配置
第一次使用需要初始化 npm init -y npm-tut { "requires": true, "lockfileVersion": 1, "d ...
- POJ--2284--That Nice Euler Circuit【平面图欧拉公式】
链接:id=2284">http://poj.org/problem?id=2284 题意:一个自己主动绘图的机器在纸上(无限大)绘图,笔尖从不离开纸,有n个指令,每一个指令是一个坐标 ...
- HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 我对hibernate和mybatis框架的比較
系统在选择操作数据库的框架上面,究竟是选择hibernate,还是mybatis. 首先说下两者的原理,假设你要关联几张表做查询,查出20条记录: 1.假设是mybatis SELECT * FR ...
- OpenWrt inittab
OpenWrt 启动时会执行 rc.d/ 下的脚本. 这篇文章 介绍了启动脚本里的规则. K50dropbear -> ../init.d/dropbear K85odhcpd -> .. ...
- coco2d-x 3.0游戏实例学习笔记 《跑酷》 第二步---游戏界面&全新的3.0物理世界
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写.并做相关笔记 ...
- Hibernate quick start
Preface Working with both Object-Oriented software and Relational Databases can be cumbersome and ti ...
- bash的pushd和popd
1 pushd和popd是bash shell的builtin命令 2 pushd和popd维护了一个目录栈 pushd xxx就是将xxx放入目录栈顶. 目录栈顶就是当前的目录. 但是cd的话,会不 ...
- springboot对传参的拦截统一处理
在学习某网<java秒杀系统方案优化>的课程中,学到了一种springboot对传参的拦截统一处理的方式,特记录一下. 如后台方法一般需要根据token从Session中获取User对象, ...