基本的用户和部门类,只有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的基础学习--一对多关联的更多相关文章

  1. hibernate的基础学习--多表关联数据查询

    Hibernate共提供4种多表关联数据查询方式 OID数据查询+OGN数据查询方式 HQL数据查询方式 QBC数据查询方式 本地SQL查询方式(hibernate很少用) 1.OID数据查询+OGN ...

  2. hibernate的基础学习--多对多关联

    多对多采用学生老师模型进行测试 学生配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DOCTY ...

  3. java之hibernate之单向的一对多关联映射

    这篇主要讲hiberante中的 单向一对多关联映射 1.在应用中,有时候需要从一的一端获取多的一端的数据.比如:查看某个分类下的所有书籍信息:查看某个订单下的所有商品等. 2.在一对多的关联关系中, ...

  4. hibernate的基础学习--一对一关联

    一对一关系以丈夫和妻子模型 配置文件 妻子配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DO ...

  5. hibernate多对一和一对多关联

    关联,是类的实例之间的关系,表示有意义和值得关注的连接. 多对一单向关联: 单向多对一:<many-to-one>定义一个持久化类与另一个持久化类的关联这种关联是数据表间的多对一关联,需要 ...

  6. hibernate(八)一对多关联

    一.一对多单向关良 一对多单向关联与多对一相似 假设一个组有多个用户,即一(Group)对多(User) 需要在Group类中添加一个User类的Set集合(数据库中的用户不可能是重复的,所以要用Se ...

  7. hibernate的基础学习

    工具类: public class H3Util { private static final SessionFactory sessionFactory = buildSessionFactory( ...

  8. Mybatis学习——一对多关联表查询

    1.实体类 public class Student { private int id; private String name; } public class Classes { private i ...

  9. Hibernate非主键一对多关联。

    Unit表 id,code User表 id,ucode ...@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ucode" ...

随机推荐

  1. vim 精确匹配查找单词【转】

    删除文件中所有的空行:g/^\s*$/d 去掉所有的行尾空格::%s/\s\+$// 整个文件特定字符串的替换:%s/old_word/new_word/g 删除从当前行开始到最后一行的所有内容:., ...

  2. python之入门,你好,中国

    print("你好,中国") 可以运行py文件实现一样的效果(py文件编码一定要是utf-8编码) 你好中国基础教程结束!

  3. zoj 3573 Under Attack(线段树 标记法 最大覆盖数)

    Under Attack Time Limit:  10 Seconds      Memory Limit:  65536 KB  Doctor serves at a military air f ...

  4. C++经典面试题解析

    1. // BlankTest.cpp : 定义控制台应用程序的入口点. //题目:将一个文件中的一组整数排序后输出到另一个文件中 #include "stdafx.h" #inc ...

  5. OpenStack源码系列---neutron-server

    在看过了nova模块的源码之后,再去看OpenStack其它模块的源码会轻松很多,因为框架也是大同小异的.自四月份开通博客写了几篇文章后,真心觉得写篇技术文章如果要把前前后后牵扯到的其它技术内容都做介 ...

  6. STL--map用法

    STL--map用法map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力由于这个特性它完成有可能在我们处理 ...

  7. 关于Cascading

    Cascading是一个开源的Java库和应用程序编程接口(API),它为MapReduce提供了一个抽象层.它允许开发者构建出能在Hadoop集群上运行的复杂的.关键任务的数据处理应用. Casca ...

  8. Region Range

    三篇文章了解 TiDB 技术内幕 - 说存储| PingCAP https://pingcap.com/blog-cn/tidb-internal-1/ 对于一个 KV 系统,将数据分散在多台机器上有 ...

  9. HDU 5438 Ponds

    Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  10. Intelij Idea 2016.3.4激活

    https://www.haxotron.com/jetbrains-intellij-idea-crack-123/ http://idea.lanyus.com/