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" ...
随机推荐
- 使用git 高效多人合作
复习一下... 附加学习链接: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/) ...
- 使用nginx转发不了静态文件
从django runserver的请求来看,都收不到静态文件请求, 查看firefox的web console请求,发现都是403 然后发现nginx不在当前用户组,并且当前用户的项目的读写权限是7 ...
- OnlineJudge测试数据生成模板
int类型数据生成一(正数最多4位): #include <bits/stdc++.h> using namespace std; int main() { freopen("t ...
- PCA主成分分析Python实现
作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...
- AnimalWindow使用,实现界面动态消失
http://m.blog.csdn.net/blog/shufac/24932279 http://blog.sina.com.cn/s/blog_455245fc01000a42.html Ani ...
- 安卓2.3 js解析问题 split()
安卓2.3版本号解析错误,split和parseInt都会把09和08都解析成0,07下面解析没有问题.解决的方法是直接取个位数. function getYMD(yMd){ var dArray=n ...
- Golang之bytes.buffer
bytes.buffer是一个缓冲byte类型的缓冲器存放着都是byte Buffer 是 bytes 包中的一个 type Buffer struct{-} A buffer is a variab ...
- Android兼容性测试CTS
一.简介 为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility ...
- JQUERY多选框,单选框,检查选中的值
var str=""; $(":checkbox:checked").each(function(){ if($(this).attr("checke ...
- 基于canvas和Web Audio的音频播放器
wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件.通过wavesurfer.js你能够使用它来制作各种HTML5音频播放器,它能够在各种支持 Web A ...