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" ...
随机推荐
- MySQL安装总是失败,提示缺少Visual Studio 2013 Redistributable
MySQL安装总是失败,提示缺少Visual Studio 2013 Redistributable,但是很疑惑,我明明已经安装了呀,原来问题出在版本上,以下提供了一个可以匹配新版本mysql的版本: ...
- IntelliJ IDEA cannot resolved 处理
IntelliJ IDEA cannot resolved 处理 学习了:https://stackoverflow.com/questions/21577573/intellij-idea-can- ...
- jdk与jre安装之后的名字
jdk与jre安装之后的名字 jdk与jre的区别:https://blog.csdn.net/qq_33642117/article/details/52143824 jdk安装之后的名字: Jav ...
- 第二种BitBand操作的方式 - 让IDE来帮忙算地址
要使用Bitband来訪问外设,一定要得出相应的映射地址.人工计算肯定是不靠谱的,并且也没人想这么干.因此能够通过Excel,拉个列表来计算.想想,这也是一个不错的招数.可是后来想想,还是嫌麻烦,毕竟 ...
- MongoDB与MySQL的插入性能测试【转】
1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的.作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用.2009年,甲骨文 ...
- String、StringBilder和StringBuffer之间的区别
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String 2.String <(StringBuffer,StringBuild ...
- HDU 6040 Hints of sd0061 nth_element函数
Hints of sd0061 Problem Description sd0061, the legend of Beihang University ACM-ICPC Team, retired ...
- ArchLinux最小化安装 必备库 常用命令
铸成强大的工作站环境——ArchLinux最小化安装 所有问题归结起来,只是一个问题:ArchLinux最小化安装,需要安装哪些包? 1.bash//最基本的Bash Shell(必须)2.bzip2 ...
- querying rpm database
Call dbMatch on a transaction set to create a match iterator. As with the C API, a match iterator al ...
- Maven group, artifact or version defined in the pom file do not match the file ...
在把library上传到bintray空间的时候报以下错误 Could not upload to 'https://api.bintray.com/content/ping/maven/comm-a ...