- 浏览: 1229871 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
多对一:
这里举例:User类与Group类,
一个Group中是有多个User的。具体数据库表现为在Group类的主键作为User类的外键。
POJO:
package com.lwf.hibernate.pojo; public class User { private int id; private String name; private Group group = new Group(); public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
package com.lwf.hibernate.pojo; public class Group { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lwf.hibernate.pojo"> <class name="User" table="t_user"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <many-to-one name="group" column="group_id" cascade="all" ></many-to-one> </class> <class name="Group" table="t_group"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> </class> </hibernate-mapping>
测试类:
package com.lwf.hibernate.test; import junit.framework.TestCase; import org.hibernate.Session; import com.lwf.hibernate.pojo.Group; import com.lwf.hibernate.pojo.User; import com.lwf.hibernate.util.HibernateUtil; public class Many2one_Test extends TestCase{ public void testUser(){ Session session = HibernateUtil.getSession(); session.beginTransaction(); try{ Group g = new Group(); g.setName("group1"); //session.save(g); //如果不保存group那么<many-to-one name="group" column="group_id" cascade="all" />中的cascade="all" 必须设置. for (int i = 0; i < 5; i++) { User u = new User(); u.setName("user"); u.setGroup(g); session.save(u); } HibernateUtil.commit(session); }catch(Exception e){ HibernateUtil.roolback(session); }finally{ HibernateUtil.closeSession(session); } } public void testLoad(){ Session session = null; try{ session = HibernateUtil.getSession(); session.beginTransaction(); User user = (User)session.load(User.class, 1); System.out.println(user.getName()); System.out.println(user.getGroup().getName()); HibernateUtil.commit(session); }catch(Exception e){ HibernateUtil.roolback(session); }finally{ HibernateUtil.closeSession(session); } } }
注意点:
一、了解cascade="all"的使用.如果设置了级联,那么保存User的时候会自动先保存Group。否则如果不调用session.save(g);会报错。
二、观察testLoad方法,我们发现发出了如下SQL语句:
Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_, user0_.group_id as group3_0_0_ from t_user user0_ where user0_.id=? user Hibernate: select group0_.id as id1_0_, group0_.name as name1_0_ from t_group group0_ where group0_.id=? group1
即发出了两条SQL,先查出user的group_id,然后再通过group_id到group对象查询name
那么我们知道在数据库操作上是可以通过连接来查询出的:
mysql> select u.name,g.name from t_user u left outer join t_group g on u.group_id=g.i d;
那么其实我们在many-to-one上增加fetch属性即可实现这个查询
如下:
<many-to-one name="group" column="group_id" cascade="all" fetch="join" ></many-to-one>
再来测试一下,这时通过testLoad方法发出的SQL语句是:
Hibernate: select user0_.id as id0_1_, user0_.name as name0_1_, user0_.group_id as group3_0_1_, group1_.id as id1_0_, group1_.name as name1_0_ from t_user user0_ left outer join t_group group1_ on user0_.group_id=group1_.id where user0_.id=? user group1
- hibernate_many2one.rar (10.7 KB)
- 下载次数: 6
发表评论
-
Hibernate抓取策略二
2010-05-11 17:56 1070在Classes与Student一对多映射中,我们将Set里面 ... -
Hibernate抓取策略一
2010-05-11 16:29 1315抓取策略指多表关联查询的时候,Hibernate会发出多条sq ... -
Hibernate查询缓存
2010-05-11 01:15 1611二级缓存中,如果不设置“查询缓存”,那么hibernate只会 ... -
Hibernate所需完整类库
2010-05-11 01:08 884附件为最新配置Hibernate所需的包. 由来: 一、下 ... -
Hibernate 二级缓存缺少包出现的异常
2010-05-10 23:29 2325由于二级缓存使用的包org.hibernate.cache.E ... -
转:Hibernate性能优化之二级缓存
2010-05-10 17:28 1132http://chenhongbin007.blog.163. ... -
Hibernate lazy加载FOR 单端关联
2010-05-10 00:54 1309Hibernate单端关联懒加载策略:即在<one-to ... -
Hibernate lazy加载FOR Connection
2010-05-10 00:28 1185Hibernate集合属性的懒加载策略: 在集合属性上, ... -
Hibernate lazy加载FOR Class
2010-05-09 23:51 1040lazy策略可以用在: * <class>标签 ... -
Hibernate性能优化:二级缓存
2010-05-06 16:48 1060hibernate二级缓存 定义步骤: 1、打开缓存, ... -
Hibernate性能优化:一级缓存
2010-05-06 16:33 1114一级缓存与session周期一致,二级缓存与sessionFa ... -
Hibernate悲观锁与乐观锁及事务管理机制
2010-05-06 11:57 1180引用: 悲观锁与乐观锁: http://www.iteye ... -
Hibernate学习笔记博客
2010-05-06 11:32 716网上也有人自学hibernate的笔记 http://hi. ... -
Hibernate与EJB的区别
2010-05-05 18:09 865Hibernate不支持分布式应用 -
Hibernate对象状态
2010-05-05 17:48 1767Hibernate对象有三种状态: 瞬时状态(Transie ... -
Hibernate HQL示例十二:DML更新、删除及与Hibernate持久化更新
2010-05-05 16:42 1964DML更新及删除 示例: package com.bjsx ... -
Hibernate HQL示例十一:分页查询
2010-05-05 16:21 1129分页查询: select * from t_student ... -
Hibernate HQL示例十:统计查询
2010-05-05 15:57 2108统计函数的使用 count(*) 等 package co ... -
Hibernate HQL示例九:连接查询
2010-05-05 15:38 3533inner join left out join rig ... -
Hibernate HQL示例八:查询对象导航及Implicit Join
2010-05-05 10:32 1680通过Student对象导航到class对象的id 如下: ...
相关推荐
本文将深入探讨Hibernate中的多对一映射关联配置,并结合具体的文档心得进行讲解。 首先,我们要了解多对一映射的基本概念。在数据库设计中,如果一个表(实体A)的某一列是另一个表(实体B)的主键,那么就存在...
1. 一对多与多对一映射: 在现实世界中,许多关系表现为一对多或多对一的形式。例如,一个老师可以教授多个学生,而一个学生只能被一个老师教导;同样,一个部门可以包含多个员工,但每个员工只属于一个部门。在...
在Java或其他编程语言中,一对多映射(也称为多对一映射)和双向映射是两个重要的概念,它们在设计模式、数据库关系映射以及数据结构实现等方面有广泛应用。 一对多映射是指一个键可以对应多个值,而每个值只能对应...
通过学习和实践Hibernate的一对多和多对一映射,你可以更高效地管理数据库中的复杂关系,使得数据操作更加便捷。在实际项目中,根据业务需求灵活运用这些映射策略,可以极大地提高开发效率和代码的可维护性。
本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析和工具使用技巧。 **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多...
本文将深入探讨 Hibernate 中的一对一映射关系,并以"hibernate 映射关系学习入门 一对一映射Eclipse源码"为主题,详细解析其概念、配置以及实际应用。 一对一映射是Hibernate中的一种关联关系,它表示两个实体之间...
一对多映射指的是一个父类实体对应多个子类实体的关系,例如一个学生可以有多个课程,一个部门可以有多名员工等。 一、一对多映射的基本概念 在数据库中,如果一个表的记录(主表)与另一个表的记录(从表)之间...
本篇将深入讲解iBATIS一对一映射的概念、配置及应用,帮助你更好地理解和运用这个功能。 一对一映射在数据库设计中是指两个表之间存在一对一的关系,例如,一个员工可能只有一个部门,一个部门也只对应一个员工。在...
标签中的“工具”可能指的是使用诸如MyEclipse、IntelliJ IDEA等集成开发环境的Hibernate插件,这些工具能自动生成映射文件或注解,简化开发过程,帮助开发者更好地理解和管理多对一映射。 总结,多对一的映射是...
首先,我们需要在映射文件中定义主表(一对一端)和从表(多对一端)的映射。假设我们有一个`User`类对应`users`表,一个`Order`类对应`orders`表,其中`orders`表有一个`user_id`字段作为外键关联到`users`表。 在...
本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...
2. **单向多对一映射**: 这种关系中,多个实例可以引用同一个实例,比如员工与部门的关系。在实体类中,我们通过@ManyToOne注解指定多的一方与一的一方的关系,并通过@JoinColumn指定引用的列名。 3. **单向一对...
本笔记将详细介绍SSH映射文件配置的三个核心部分:基础配置参数使用、多对一映射以及一对多映射。 **基础配置参数使用** SSH的基础配置通常位于`~/.ssh/config`文件中,此文件可以定义不同的主机别名和相关设置。...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
* 多对一映射:使用 @ManyToOne 和 @JoinColumn 注解,指定关联列。 * 一对多映射:使用 @OneToMany 注解,默认会使用连接表做一对多的关联。添加 @JoinColumn 注解后,就会使用外键关联,而不使用连接表。 * 双向一...
在本篇关于MyBatis框架的学习中,我们将深入探讨一对一关联映射和一对多关联映射的概念、配置以及在实际开发中的应用。MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,从而...
3. **多对一映射 (Many-to-One)** 多对一与一对多是相反的关系,即多个实体可以与单个实体关联。这在 Java 类中通过在子类使用 `@ManyToOne` 注解,而在父类使用 `@OneToMany` 实现。通常,多对一的外键是在子类...