- 浏览: 447225 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (162)
- easymock (3)
- 模板引擎 (3)
- JForum (4)
- web (9)
- spring (10)
- java (20)
- struts (9)
- uml (3)
- java pattern (19)
- JQuery (14)
- 多线程 (13)
- database (21)
- PS (3)
- ejb (6)
- 版本管理 svn , maven , ant (2)
- protocol (1)
- 测试 (1)
- ws (7)
- Apache (4)
- 脚本语言 (1)
- guice (1)
- 分布式 (4)
- 架构 (0)
- 经验 (1)
- 版本管理 svn (1)
- maven (1)
- ant (1)
- 书籍 (1)
- Linux (1)
最新评论
-
Master-Gao:
稍微明白了点,,有点萌萌哒
为什么匿名内部类参数必须为final类型 -
waw0931:
终于明白了,谢谢!
为什么匿名内部类参数必须为final类型 -
十三圆桌骑士:
提供了两个链接还是有用的。
安装Mondrian -
放方芳:
[flash=200,200][/flash]
Freemarker标签使用 -
放方芳:
[b][/b]
Freemarker标签使用
一对一主键关联
数据表为:夫妻表
POJO 为:
映射文件为:
Husband.hmb.xml
<class
name="com.demo.hibernate.beans.Husband"
table="t_husband"
lazy="false"
>
<id name="id"
type="java.lang.Integer"
column="id"
>
<generator class="increment" />
</id>
<property name="name"
type="java.lang.String"
column="name"
length="50"
/>
<one-to-one name="myWife" class="com.demo.hibernate.beans.Wife" cascade="all"/> <!--配置映射-->
</class>
Wife.hbm.xml
<class
name="com.demo.hibernate.beans.Wife"
table="t_wife"
lazy="false"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="foreign" > <!--主键作为与Husband 对象关联的外键-->
<param name="property">myHusband</param> <!--主键的值是由Husband的主键赋给-->
</generator>
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="50"
/>
<one-to-one name="myHusband" class="com.demo.hibernate.beans.Husband" cascade="all"> <!--配置关联映射-->
</class>
插入一条记录:
Husband husband = new THusband();
husband.setName("杨过");
Wife wife = new Wife();
wife.setName("小龙女");
husband.setMyWife(wife);
wife.setMyHusband(husband);
session.save(husband);
session.merge(father) (×)
一对一外键关联
数据表为:父子表
POJO 为:
映射文件:
Father.hbm.xml
<class
name="com.demo.hibernate.beans.Father"
table="t_father"
lazy="false"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="increment" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="50"
/>
<one-to-one name="mySon" class="com.demo.hibernate.beans.Son" cascade="all" property-ref="myFather"/><!--配置关联映射-->
</class>
Son.hbm.xml
<class
name="com.demo.hibernate.beans.TSon"
table="t_son"
lazy="false"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="increment" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="50"
/>
<many-to-one name="myFather" class="com.demo.hibernate.beans.Father" unique="true" <!--配置关联映射-->
column="father_id" cascade="all"/> <!--father_id 为外键-->
</class>
插入一条记录
Father father = new Father();
father.setName("杨康");
Son son = new Son();
son.setName("杨过");
father.setMySon(son);
son.setMyFather(father);
session.save(father);
一对多关联
数据表为:母子表
POJO:
映射文件为:
Mother.hbm.xml
<class name="com.demo.hibernate.beans.Mother" table="t_mother" lazy="false">
<id name="id" type="java.lang.Integer" column="id">
<generator class="increment" />
</id>
<property name="name" type="java.lang.String" column="name" length="50" />
<set name="myChildren" table="t_children" inverse="false" cascade="all" lazy="false"> <!--配置关联映射-->
<key column="mother_id"/> <!--mother_id 为外键-->
<one-to-many class="com.demo.hibernate.beans.Children" />
</set>
</class>
Children.hbm.xml
<class
name="com.demo.hibernate.beans.Children"
table="t_children"
lazy="false"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="increment" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="50"
/>
<!--如果是单向关联,下面的可以不用配置-->
<many-to-one name="myMother" <!--配置关联映射-->
class="com.demo.hibernate.beans.Mother" cascade="all"
column="mother_id" insert="true"/> <!--mother_id 为外键-->
</class>
插入一条记录
Mother mother = new TMother();
mother.setName("阮母");
Children child1 = new Children();
child1.setName("阮小二");
Children child2 = new Children();
child2.setName("阮小五");
Children child3 = new Children();
child3.setName("阮小七");
Set<Children> children = new HashSet<Children>();
children.add(child1);
children.add(child2);
children.add(child3);
session.save(mother);
注:如果要查询“阮小二“的母亲是谁。则需要在Children.hbm.xml 文件中的<many-to-one>添加“insert = false” 和 “update = false”。t_children 中的外键mother_id不能有not null约束,否则,必须是双向关联,且必须有child1.setMother(mother),...child3.setMother(mother).。
多对多关联
数据表:
映射文件:
Student.hbm.xml
<class
name="org.school.hibernate.beans.Student"
table="t_student"
lazy="false"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="increment" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="50"
/>
<set name="courses" table=" t_student_course" lazy="false" inverse="false" cascade="save-update" > <!--配置关联映射-->
<key column="student_id"/>
<many-to-many class="org.school.hibernate.beans.Course" column="course_id" />
</set>
</class>
Course.hbm.xml
<class
name="org.school.hibernate.beans.Course"
table="t_course"
lazy="false"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="increment" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="50"
/>
<set name="students" table=" t_student_course" lazy="false" inverse="true" cascade="save-update" > <!--配置关联映射-->
<key column="course_id"/>
<many-to-many class="org.school.hibernate.beans.Student" column="student_id" />
</set>
</class>
查询一条记录:查询“张三”学的课程
Query query = session.createQuery("from Student where name=?");
query.setString(0,"张三");
Student student = (Student)query.uniqueResult();
String stuName = student.getName();
System.out.println(stuName);
Set courses = student.getCourses();
Iterator it = courses.iterator();
while(it.hasNext()){
String courseName = ((Course)it.next()).getName();
System.out.println(courseName);
}
在关联配置中的一些属性
invser:inverse = true 表示在给主表做save() 、update() 和 delete() 操作时,不会对象关联的表做同样的操作;inverse = false 表示当给主表中插入、修改 和 删除操作时,也会对相关联的表中做插入、修改和删除的操作。
cascade:【级联关系】 cascade = all 表示所有情况下均进行级联操;cascade = save-update 表示只有进行save() 和 update() 操作时,才进行级联操作;cascade = delete 表示只有进行 delete() 操作时,才进行级联操作。cascade = none 任何时候都不进行级联操作。cascade = delete-orphan 表示删除和当前对象已解除关系的附属对象。
sort:【排序关系】 sort = unsorted(不排序);sort = natural(自然排序);sort = comparatorClass(由某个实现了java.util.comparator接口的类型指定排序算法)。
<key>子元素的column属性指定关联表的外键.。
lazy:【是否延迟加载】 lazy = false表示立即加载;lazy = true 掩饰加载。
fetch:【抓取数据方式】 fetch = select(默认) 表示【查询抓取(Select fetching)】:需要另外发送一条 SELECT 语句抓取当前对象的关联实体或集合;fetch = join 表示【连接抓取(Join fetching)】 : Hibernate通过 在SELECT语句使用OUTER JOIN(外连接)来获得对象的关联实例或者关联集合。
<many-to-one>元素的name属性声明外键关联对象的代号;class属性声明该外键关联对象的类;column属性声明该外键在数据表中对应的字段名,unique属性表示外键值必须唯一,不能重复,unique = true,多对一的关系实际上变成了一对一的关系。
发表评论
-
安装Mondrian
2014-04-11 10:48 4654Mondrian and OLAP Mondrian i ... -
NoSql 笔记
2014-02-18 17:39 770看了一些关于NoSql的文 ... -
mysql explain用法
2014-02-14 11:53 943补充一点: id 就是 sql 语句中 select 出现 ... -
数据库范式概念解析(第一范式,第二范式,第三范式)
2013-02-26 10:17 1126大部分数据库从业人员 ... -
ORACLE数据库基础知识
2013-02-23 11:39 883http://wenku.baidu.com/view/958 ... -
Oracle 的性能优化概述
2013-02-23 11:34 1074Oracle 的性能优化概 ... -
mysql 索引
2013-02-23 11:33 977索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一 ... -
hibernate规则
2012-12-18 14:58 1108实体类的编写规则 l 实体类必须具备无参 ... -
关系型数据库性能优化总结(转)
2012-06-13 14:17 860关系型数据库性能优化 ... -
spring+hibernate架构中Dao访问数据库的几种方法
2011-11-28 18:10 1426spring+hibernate架构中Dao访问数据库的几种方 ... -
mybatis 缓存(二)
2011-10-20 13:05 5361缓存不适合情况:select ... -
mybatis 缓存(一)
2011-10-20 11:27 1284缓存概述 http://www.iteye.com/topi ... -
mybatis 基本
2011-10-20 11:14 1485今天刚听说iBATIS改名为MyBatis,实际上就是iBAT ... -
hibernate 延迟加载(一)
2011-10-12 10:03 969首先是第一个误区:延迟加载只能作用于关联实体 看到这个是不 ... -
mybatis 多对多 处理
2011-09-26 18:41 42104下面的例子让新手看 ... -
MyBatis+Spring基于接口编程的原理分析
2011-09-17 15:57 3443整合Spring3及MyBatis3 对于整合Sprin ... -
解释 关闭statement 和rs
2010-09-19 13:14 2369很多朋友在Java开发中, ... -
HIBERNATE
2010-07-30 11:51 888使用java进行项目开发也有不少年头了,应用从网站到金融产品到 ... -
Oracle嵌套表和数组的使用(省去了连接查询)
2010-07-27 17:18 2305Oracle嵌套表的使用 1. 创建对象类型 create ... -
延迟加载
2010-07-11 14:04 1341could not initialize proxy - no ...
相关推荐
"hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...
### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...
Hibernate作为一种强大的对象关系映射(Object Relational Mapping,简称ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了持久化层的开发工作,而且提高了应用程序的灵活性与可维护性。其中,实体关联...
其中,“关联映射”是Hibernate中的一个重要概念,用于处理实体之间的关联关系,例如一对一、一对多、多对一以及多对多等。 #### 常用属性解析 为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解...
3. **映射文件**:使用`hibernate-mapping`标签定义,或者使用Java注解,描述实体类与数据库表之间的映射规则。 4. **SessionFactory和Session接口**:SessionFactory是线程安全的,用于创建Session实例。Session是...
本文档主要聚焦于Hibernate框架下继承关系的映射,通过三种不同的策略——隐式继承映射、单表映射和关联表映射,来实现类的继承结构在数据库中的映射。 ### 隐式继承映射 #### 定义与配置 隐式继承映射也称为“表...
在 Hibernate 中,映射关系是将数据库表与 Java 类之间的关联方式,使得对象模型可以与关系模型无缝对接。本篇文章将详细探讨 Hibernate 中的多种映射关系。 1. **一对一映射 (One-to-One)** 一对一映射表示两个...
对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳...
### Hibernate关联关系配置详解 #### 一、一对多与多对一关系配置 在软件开发过程中,实体之间的关联关系是常见的需求之一。其中,“一对多”与“多对一”的关系尤为常见,这类关系通常用来表示实体之间的层级或...
关联映射是Hibernate中的核心概念之一,它允许我们将数据库中的表关系映射到对象之间的关系。主要的关联类型有以下几种: 1. **一对一(One-to-One)关联**:一个实体对应另一个实体的唯一实例。在数据库中,通常...
Hibernate 是一个开源的Java ORM(Object-Relational Mapping)框架,它通过提供一种对象-关系映射机制,使得开发者可以使用面向对象的方式来操作数据库,从而避免了传统的JDBC繁琐的数据库操作。 ### 数组映射原理...
对多关系在 Hibernate 中,多对多关系通常涉及到一个中间表来存储两个实体之间的关联。以下是如何配置 Hibernate 的多对多映射关系。 1. 数据库建表 假设我们有两张表,`users` 和 `roles`,它们通过 `user_roles` ...
本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型在对象模型中的体现。这种关联通常用于表示两个实体之间非常特殊的联系,比如一个人只有一个身份证,或者一个公司只有一个总部...
Hibernate是一种广泛使用的Java持久化框架,它简化了对象关系映射(Object-Relational Mapping,简称ORM)的过程,使得开发人员可以更加专注于业务逻辑的实现而无需过多关注底层数据库的具体操作细节。在Hibernate中...
3. **关系映射(Relationship Mapping)**: - **一对一(OneToOne)**:通过`@OneToOne`注解设置一对一关系,可能涉及到`@PrimaryKeyJoinColumn`来指定关联的主键。 - **一对多(OneToMany)**:使用`@OneToMany`...
本文将深入讲解 Hibernate 中的映射关系,特别是如何实现一对一(One-to-One)的关联映射。 首先,Hibernate 的核心配置始于 `Configuration` 接口,它用于加载配置文件并创建 `SessionFactory`。`SessionFactory` ...