- 浏览: 343115 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zy_mensheng:
请问一下 怎么 js没有解析啊 还是钟表图..
调用BIEE提供的web service -
安铁辉:
师兄你很久没更新博客了
Information Dashboard Design读书笔记 -
mojunbin:
很清晰的文章
秒杀相关知识以及技术 -
yanchangjun8102:
楼主你好,我也最近在研究biee的webservice这块,按 ...
调用BIEE提供的web service -
sacredon:
不错,楼主我是看着你的这篇文章写代码调用的BIEE的Web ...
调用BIEE提供的web service
基于主键的一对一关联
Person类和IdCard,一对一映射。
person的属性为:id,name,idCard
IdCard的属性为:id,usefulLife,person
由于身份证和人是一对一的,身份证的id和人的id可以相同。可以使得idcard的id的产生与person保持一致。主从对象通过主键关联起来。
类Person:
public class Person { private int id; private String name; private IdCard idCard; public int getId() { return id; } public void setId(int id) { this.id = id; } public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
类IdCard:
public class IdCard { private int id; private Date usefulLife; private Person person; public int getId() { return id; } public void setId(int id) { this.id = id; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public Date getUsefulLife() { return usefulLife; } public void setUsefulLife(Date usefulLife) { this.usefulLife = usefulLife; } }
映射文件person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="hibernatetest01"> <class name="Person" table="t_person"> <id name="id" > <generator class="native"></generator> </id> <property name="name"></property> <one-to-one name="idCard"/> //person和idcard是一对一映射 </class> </hibernate-mapping>
映射文件idcard.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="hibernatetest01"> <class name="IdCard" table="t_idcard"> <id name="id" > <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="usefulLife"></property> <one-to-one name="person" constrained="true"/> //加上约束,保证了person必须有idcard与之对应,未加时,保存person可以没有idcard </class> </hibernate-mapping>
注: 采用外键产生方式,该类有一个属性参数,需要在配置文件中指定给他,他需要知道利用什么来产生idcard的主键。在此指定person,与下面的 <one-to-one name="person"/>对应。
测试类:
public class Main { public static void main(String[] args){ add(); } static Person add(){ IdCard idCard = new IdCard(); idCard.setUsefulLife(new Date()); Person p = new Person(); p.setName("jianchen"); p.setIdCard(idCard); idCard.setPerson(p); Session s = null; Transaction tx = null; s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.save(p); s.save(idCard); tx.commit(); return p; } }
一对一主键关联关系的检索:
static void query(int id){ Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); Person p = (Person)s.get(Person.class, id); System.out.println(p.getIdCard().getUsefulLife()); tx.commit(); }
在主函数中调用query(1),person和idcard是主从关系。对主类进行查询,会把从类也查询出来,体现在查询使用左外连接,一次性的查询。
2009-02-04 15:51:20.0
就是把打印的那句话注释掉,同样会一次性的查出主从类 。查询语句如下:
如果是查询从类,
static void query(int id){ Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); IdCard idCard =(IdCard) s.get(IdCard.class, id); System.out.println(idCard.getPerson().getName()); tx.commit(); }
对从类进行查询只会查询出从类的信息,主类被懒加载。从查询语句上看,以上代码执行了两次查询。
Hibernate: select person0_.id as id1_1_, person0_.name as name1_1_, idcard1_.id as id2_0_, idcard1_.usefulLife as usefulLife2_0_ from t_person person0_ left outer join t_idcard idcard1_ on person0_.id=idcard1_.id where person0_.id=?
jianchen
把后面的打印语句删掉,就只会执行上面的一次查询。
使用lazy属性:
修改映射文件:
<hibernate-mapping package="hibernatetest01"> <class name="IdCard" table="t_idcard"> <id name="id" > <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="usefulLife"></property> <one-to-one name="person" constrained="true" lazy="false"/> //加上约束,保证了person必须有idcard与之对应,未加时,保存person可以没有idcard </class> </hibernate-mapping>
分析:
lazy=”false“表明对person不进行懒加载。这样就会导致在查询从类时也会把主类进行加载。
lazy在hibernate 3.0之前只有两个值:true ,false
3.0后lazy有三个值:true,false,proxy。其中proxy是默认的方式,采用代理实现懒加载。
在以上基础上进行进一步的修改:
<one-to-one name="person" constrained="true" lazy="true" fetch="select"
/>
虽然配置为懒加载,但由于设置了抓取为select
,就是说在抓取idcard时,也会抓取person。这也会导致在加载从对象时即时的加载主对象。
由此可见,hibernate中的属性配置是互相制约和影响的。hibernate的难点也在此。
基于外键的一对一关联
可以描述为多对一,加uniquer=“ture”,就变为一对一关联了
对象模型不需要改变,对映射文件进行修改。
person.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="hibernatetest01"> <class name="Person" table="t_person"> <id name="id" > <generator class="native"></generator> </id> <property name="name"></property> <one-to-one name="idCard" property-ref="person"/> //person通过idcard的属性person来查找属于自己的idcard </class> </hibernate-mapping>
注: property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。
idcard.hbm.xml映射文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="hibernatetest01"> <class name="IdCard" table="t_idcard"> <id name="id" > <generator class="native"></generator> </id> <property name="usefulLife"></property> <many-to-one name="person" column="person_id" unique="true"/> </class> </hibernate-mapping>
表结构为:
从这个表结构上看,person和idcard是一对多的关系,因为idcard表有一个外键指向person表。但是在idcard的映射文件中,把外键强制设定为唯一,这样就构成了一对一映射。
<many-to-one name="person" column="person_id" unique="true"/>
发表评论
-
hibernate学习之十八篇
2009-03-16 17:27 806hibernate不适合的场景: 1,不适合OLAP(on- ... -
hibernate学习之十七篇
2009-03-16 12:31 989零碎知识小结: ◆数据类型: 1,<propert ... -
PO and POJO
2009-03-11 23:49 819原文:http://danni505.blog.51cto.c ... -
hibernate学习之第十六篇
2009-03-11 21:36 1470session context和事务边界 用current_ ... -
hibernate学习之第十五篇
2009-03-11 21:33 1027事务与事务边界 hibernat ... -
Hibernate二级缓存攻略(转)
2009-03-09 22:56 840Hibernate二级缓存攻略(转) 很多人对二级缓存都不太 ... -
hibernate学习之第十四篇
2009-03-09 17:48 1154hibernate的内部缓存 hibernate的缓存分为 ... -
hibernate学习之第十三篇
2009-03-09 17:41 1007load方法的懒加载及原理分析 懒加载的目的,减少不必要的数 ... -
hibernate学习之第十二篇(续)
2009-03-06 19:10 985《四》每个具体类映射 ... -
hibernate学习之第十二篇
2009-03-06 15:57 938《三》混合使用“一个 ... -
hibernate学习之第十一篇(2)
2009-03-05 23:00 892《二》每个子类映射到一张表(joined-subclass) ... -
hibernate学习之第十一篇(1)
2009-03-05 22:55 1453hibernate的继承映射 《一》一张表映射一棵继承树 ... -
hibernate学习之第十篇
2009-03-05 13:53 1109级联和关系维护 Cascade 用来说明当对主对象进行某种操 ... -
hibernate学习之第九篇
2009-03-04 22:52 1338hibernate中的集合类型 引入: Hibernate ... -
hibernate学习之第八篇
2009-03-03 22:11 990组件映射 关联的属性是个复杂类型的持久化类,但不是实体即: ... -
hibernat学习之第七篇
2009-03-03 13:06 944多对多关联关系的映射 在操作和性能方面都不太理想,所以多对 ... -
深入浅出hibernate摘录2
2009-03-02 00:38 1504以下内容摘自深入浅出hibernate 在编写代码的时候,尽 ... -
深入浅出hibernate摘录
2009-03-01 19:45 1228以下摘自深入浅出hiberna ... -
hibernate学习之第五篇
2009-03-01 19:43 10741, oracle数据库中,user是关键字,如果用户的表名为 ... -
hibernate学习之第四篇(对象状态)
2009-03-01 19:38 1076session 的几个主要方法 ...
相关推荐
Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。
《经典Hibernate教程_从入门到精通》第一篇主要介绍了ORM概述和Hibernate的作用,以及Hibernate应用程序的基本结构和JDBC与Hibernate的对比。以下是详细的知识点解析: 1. **ORM概述** - ORM(Object-Relational ...
本篇将主要围绕`Hibernate3中文参考手册`展开,深入探讨Hibernate的基础概念、配置、实体映射、查询语言以及其他关键特性。 1. **Hibernate概述** Hibernate是一个开源的ORM框架,它提供了对Java应用程序的数据库...
【hibernate教程-从入门到精通-第4篇(共四篇)共2】这篇教程是关于Java持久层框架Hibernate的学习指南,旨在帮助初学者深入理解并掌握Hibernate的核心概念和技术。Hibernate作为一款强大的对象关系映射(ORM)工具,...
在本篇“Hibernate学习笔记(三)”中,我们将深入探讨Hibernate这一强大的Java持久化框架。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式处理数据库操作,极大地简化了Java应用程序与...
本教程旨在提供一个全面的Hibernate学习路径,让你能够熟练地运用Hibernate进行数据库操作,提升开发效率。通过深入学习,你将掌握如何利用Hibernate进行对象关系映射(ORM),事务管理,查询优化以及与其他技术如...
本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计模式的Web应用框架,它极大地简化了Java Web应用的开发。Struts2.1引入了拦截器(Interceptor)机制,使得业务逻辑和...
**hibernate学习笔记** 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。这篇学习笔记将带你深入理解Hibernate的核心概念、配置、实体映射以及基本操作。 ## 一、...
总结,本篇笔记主要介绍了Hibernate的基本使用,包括环境配置、项目构建、DAO设计以及具体的数据库操作实现,提供了从创建对象到持久化到数据库的完整流程。通过这种方式,开发者可以更加专注于业务逻辑,而不用过于...
【标题】"Hibernate之第1解之-hibernate_demo_1" 涉及的主要内容是对Hibernate框架的基础理解和应用,这是Java开发中一个重要的持久化工具。这篇博客可能详细介绍了如何搭建Hibernate开发环境,以及进行初步的数据...
本篇文档将深入探讨Hibernate的核心概念、配置、实体映射以及常用操作。 **一、Hibernate概述** Hibernate是一个开源的ORM框架,它的主要功能是将Java对象与数据库表进行映射,实现了对象的持久化。通过使用...
6. **第二级缓存** Hibernate支持二级缓存,以提高性能。它存储了SessionFactory生命周期内的对象,避免了重复的数据库访问。 7. **实体关系映射** Hibernate支持多种关系映射,包括一对一、一对多、多对一和多对...
6. **缓存机制**:Hibernate 3.2.5支持二级缓存,第一级缓存由Session管理,每个Session都有自己的缓存;第二级缓存则为SessionFactory级别,可跨Session共享,提高了性能。 7. **事务处理**:Hibernate提供了基于...
总的来说,这份教程旨在通过实例和练习帮助学习者熟练掌握Hibernate框架的核心功能,包括实体映射、事务管理、关联配置以及关联的自动加载。通过学习这些内容,开发者能够有效地使用Hibernate来简化Java应用程序中的...
这篇关于“hibernate测试”的文章旨在深入探讨Hibernate的核心概念,以及如何进行有效的测试以确保其在项目中的稳定运行。 1. **Hibernate简介** Hibernate是一个开源的Java库,它为Java应用程序提供了一个框架,...
本篇文章将详细探讨该版本中的核心库内容及其实用特性,帮助开发者深入理解并有效利用Hibernate进行开发。 一、Hibernate 3.1的核心库 在提供的压缩包中,`lib`文件夹包含了Hibernate 3.1运行所需的各类库文件。...
### Hibernate学习笔记精要 #### 一、HelloWorld与Hibernate入门 **HelloWorld**是学习任何新技术时的经典第一个程序,Hibernate也不例外。通过构建一个简单的Java项目`hibernate_0100_HelloWorld`,我们可以熟悉...
《Hibernate学习笔记》是一份深度剖析Hibernate框架的教程,旨在为初学者提供全面而深入的指导,帮助他们快速掌握这个强大的Java对象关系映射(ORM)工具。Hibernate作为Java领域中广泛使用的ORM解决方案,它极大地...
本篇文章将基于“hibernate3.0立体文档”中的32个示例,深入探讨Hibernate的核心概念、工作原理以及常见用法。 一、Hibernate概述 Hibernate是Java开发中的一个持久化框架,它通过提供一种对象-关系映射机制,将...