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" ...
随机推荐
- android开发教程之使用线程实现视图平滑滚动示例 改
package com.melonsapp.messenger.ui.popupuser; import android.os.Handler; import android.view.View; i ...
- VisualSVN Server 导入已存在的库
http://blog.csdn.net/lidatgb/article/details/7984220 早些时候建立过一个SVN Server的库,后来觉得库的名字太长了,随意换了一 ...
- [Rust] Pass a JavaScript Function to WebAssembly and Invoke it from Rust
In some cases it’s useful to be able to invoke a JavaScript function inside Rust. This session showc ...
- 从机器码理解RIP 相对寻址
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/rip-relative-addressing 本博客同步在 ...
- php中的register_shutdown_function和fastcgi_finish_request
在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和应用场 ...
- PHP读取excel(6)
有时候我们只需要读取某些指定sheet,具体代码如下: <?php header("Content-Type:text/html;charset=utf-8"); //引入读 ...
- [LeetCode] 038. Count and Say (Easy) (C++/Python)
索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 038. Cou ...
- Python常用的包
Python常用的处理数据的包和它的Tutorial(点击每个包的名称): Numpy:提供对多维数组的支持,支持矢量运算,速度快 matplotlib.pyplot:图表的绘制 Pandas:基于 ...
- c++学习笔记之基础---类内声明函数后在类外定义的一种方法
在C++的“类”中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数体. } 这个是在类 ...
- python第三方库系列之十八--python/django test库
django是属于python语音的web框架,要说django測试.也能够先说说python的測试.django能够用python的方式測试,当然,django也基于python封装了一个自己的測试 ...