一对多关联映射(单向关联)见项目:me_one_to_many
模型
一个用户组(group)对应多个用户。
2.
实体类(省略set,get方法)
public class User {
private int id;
private String name;
}
public class Group {
private int id;
private String name;
private Set Users;
}
3.
数据模型
mysql> desc t_user;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| groupid | int(11) | YES | MUL | NULL | |
+---------+--------------+------+-----+---------+----------------+
mysql> desc t_group;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
4.
映射文件
一个用户组对应多个用户。
多对一关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为多到一的关系,如:当载入一个用户(user)时将载入组(group)的信息。
一对多关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为一到多的关系,如:当载入一个组(group)时将载入此组用户的信息。
可以说,一对多和多对一的映射策略是一致的,都是通过在"多"的一端添加一个外键指向"一"的一端,只是站的角度不同。
User.hbm.xml:
<hibernate-mapping>
<class name="com.dvnchina.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Group.hbm.xml:
<hibernate-mapping>
<class name="com.dvnchina.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- <set name="users" cascade="all">-->
<set name="users" order-by="name">
<key column="groupid"/>
<one-to-many class="com.dvnchina.hibernate.User"/>
</set>
</class>
</hibernate-mapping>
5.
测试
public class TestOneToMany extends TestCase {
public void testSave(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0;i<9;i++){
User user = new User();
user.setName("yang"+i);
//session.save(user);
users.add(user);
}
//当user没有save,即为Transient对象,将抛出TransientObjectException
//因为持久对象不能直接引用瞬时对象,所以我们需要先save(user)使其为持久对象后
//再引用
Group group = new Group();
group.setName("凤山人在线");
group.setUsers(users);
session.save(group);
tx.commit();
HibernateUtils.closeSession(session);
}
public void testCascade(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0;i<9;i++){
User user = new User();
user.setName("yang"+i);
users.add(user);
}
//在user.hbm.xml中的one-to-many中设置级联设置cascade="all",此时不需要使user
//为持久对象而可以直接使用它,因为save(group)时将级联保存user
Group group = new Group();
group.setName("凤山人在线");
group.setUsers(users);
session.save(group);
tx.commit();
HibernateUtils.closeSession(session);
}
//级联是对象之间的连锁操作(只对增删改起作用,对load不起作用,load是由one-to-many维护的)
public void testLoad(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Group group = (Group) session.load(Group.class, 2);
Set list = group.getUsers();
for(Iterator ite = list.iterator();ite.hasNext();){
User user = (User) ite.next();
System.out.println(group.getName()+","+user.getName());
}
tx.commit();
HibernateUtils.closeSession(session);
}
}
附件:http://down.51cto.com/data/2351411
一对多关联映射(单向关联)见项目:me_one_to_many相关推荐
- Hibernate 、多表关联映射-组件关联映射(component)
组件关联映射可以将一些简小的数据与主题放在一个表中,例如firstName 和LastName这两个结合在一起可以组成一个名字,但是再分别将这两个再建一个表就不太合适了,这个时候可以用到组件关联映射: ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
- 【SSH系列】Hibernate映射 -- 一对多关联映射
映射原理 一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入 ...
- hibernate一对多关联映射
一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端.关联关系都是由多端维护,只是在写映射时发生了变化. 多对一和一对多的区别 多对一和 ...
- 初识Hibernate之关联映射(一)
上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- Hibernate之关联映射
在现实生活中 ,很少有对象是孤立存在的,例如老师,往往和被授课的学生存在关联关系,如果得到了某个老师实例,那么我们就可以直接获取该老师 对应的全部学生.同样,我们得到了一个学生实例 ,我们也可以获取 ...
- Mybatis关联映射;Mybatis注解
Mybatis关联映射 Mybatis关联映射的用途: 在实际的开发过程中,对于数据库的操作除了单表外往往会涉及到多张表,这些操作在面向对象中就涉及到了对象与对象之间的关联关系.针对多表之间的操作,M ...
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...
最新文章
- 如何使用Leangoo看板统计中的任务周期?
- 数据中心智慧机房解决方案
- 让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务
- Ubuntu下报错PCIe Bus Error:severity=Corrected, type=Physical Layer, id=00e8(Receiver ID)
- JZOJ 5068. 【GDSOI2017第二轮模拟】树
- Linux基础命令---get获取ftp文件
- oracle之set运算符和练习
- (九)nodejs循序渐进-Express框架(进阶篇)
- java 动态转换器,Java 编程的动态性,第 5 部分: 动态转换类
- 【Java】Java数据库访问体系重点总结
- mysql重新构建自增长_mysql 建表后 重新构建 自增字段 (保留 原有字段结构)
- BSD/MIT/Apache许可证印象尚可
- Python下载prettyloaded的swf
- 最新酷睿计算机配置,三款intel九代酷睿全系列组装电脑配置推荐 每一款CPU都支持超频...
- oracle9.2.0.7,Oracle9.2.0.1升级到9.2.0.7
- java 多线程局域网快速传输文件,java大文件复制最高效方法多线程FileChannel
- php 美化登录页面,把你的WordPress登录页面进行CSS美化
- Java截图转文字程序
- 2018 ISCC re\web\misc WP
- 看google如何招人
热门文章
- ECMAScript5 Object的新属性方法
- Springboot使用thymeleaf进行页面跳转
- JavaScript初学者必看“new”
- 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
- 【Mac】『终端』显示、隐藏所有文件
- 20分钟打造你的Bootstrap站点
- Tomcat5.5报错:Apache Portable Runtime was not found
- ORACLE一致读与ORA-01555
- 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界:光照与材质专场...
- linux配置gprs modem