- 浏览: 375082 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
摘自圣思园 19.Hibernate的对象检索策略深度解析.avi 后半部分
一对一映射:
主键关联。
测试数据:
映射配置文件:
----测试代码:
存储代码:
运行结果:
查询代码:
运行查询代码的时候, hibernate会自动发出左外连接的SQL查询语句,如下:
Hibernate: select student0_.id as id1_4_1_, student0_.name as name2_4_1_, idcard1_.id as id1_1_0_, idcard1_.card_number as card2_1_0_ from test_student student0_ left outer join test_idcard idcard1_ on student0_.id=idcard1_.id where student0_.id=?
由于发出的是left outer join,此时的Student中所对应的IdCard对象也被赋值,如图所示:
====================关于一对一的延迟加载=============
在这里我们用的是get方法,Hibernate使用左外连接直接获取了Student所对应的IDCard。 但是如果我们想通过延迟加载来获取IDcard,那就必须在映射配置文件中做一些改动。
在主表Student中的<one-to-one>加入属性constrained="true",该属性默认值为false。
one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。
此时执行代码如下:
-- 这里要注意的是IdCard映射文件应该配置延迟加载为true,当然Hibernate默认的延迟加载就是true。 所以不去配置也可以。 但是如果被配置成false,这里就不会实现延迟加载。
一对一映射:
主键关联。
测试数据:
public class Student { private String id; private String name; private IdCard idCard; } public class IdCard { private String id; private int number; private Student stu; } //不管是得到IdCard还是Student,都会得到相应的一对一关联的对象。
映射配置文件:
idcard.xml <hibernate-mapping package="com.lj.zhang.Student"> <class name="IdCard" table="test_idcard"> <id name="id" column="id"> <!-- foreign这里是用外联table的已经生成的主键 --> <generator class="foreign"> <!-- name=property是固定参数,表示用外联的student的id --> <param name="property">stu</param> </generator> </id> <!-- 注意这里column不能写成number,否则oracle会报错-- ORA-00904:标示符无效 --> <property name="number" column="card_number" type="integer"/> <one-to-one name="stu" class="com.lj.zhang.Student.Student"/> </class> </hibernate-mapping> student.xml <hibernate-mapping package="com.lj.zhang.Student"> <class name="Student" table="test_student"> <id name="id" column="id" type="string"> <generator class="uuid"> </generator> </id> <property name="name" column="name" type="string" /> <one-to-one name="idCard" class="IdCard" cascade="all" /> </class> </hibernate-mapping>
----测试代码:
存储代码:
Session session=HibernateUtil.openSession(); Student s=new Student("li",null); IdCard card=new IdCard(123,s); s.setIdCard(card); Transaction tx=session.beginTransaction(); session.save(s); tx.commit();
运行结果:
查询代码:
Session session=HibernateUtil.openSession(); Student s=(Student) session.get(Student.class, "4028bd81427560bc01427560c0120000"); System.out.println(s.getName()); System.out.println(s.getIdCard().getName());
运行查询代码的时候, hibernate会自动发出左外连接的SQL查询语句,如下:
Hibernate: select student0_.id as id1_4_1_, student0_.name as name2_4_1_, idcard1_.id as id1_1_0_, idcard1_.card_number as card2_1_0_ from test_student student0_ left outer join test_idcard idcard1_ on student0_.id=idcard1_.id where student0_.id=?
由于发出的是left outer join,此时的Student中所对应的IdCard对象也被赋值,如图所示:
====================关于一对一的延迟加载=============
在这里我们用的是get方法,Hibernate使用左外连接直接获取了Student所对应的IDCard。 但是如果我们想通过延迟加载来获取IDcard,那就必须在映射配置文件中做一些改动。
在主表Student中的<one-to-one>加入属性constrained="true",该属性默认值为false。
one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。
此时执行代码如下:
Student s=(Student) session.load(Student.class, "4028bd814275cf19014275cf1c560000"); System.out.println(s.getName());//Hibernate: select student0_.id as id1_4_0_, student0_.name as name2_4_0_ from test_student student0_ where student0_.id=? li System.out.println(s.getIdCard().getNumber());//Hibernate: select idcard0_.id as id1_1_1_, idcard0_.card_number as card2_1_1_, student1_.id as id1_4_0_, student1_.name as name2_4_0_ from test_idcard idcard0_ left outer join test_student student1_ on idcard0_.id=student1_.id where idcard0_.id=? 123
-- 这里要注意的是IdCard映射文件应该配置延迟加载为true,当然Hibernate默认的延迟加载就是true。 所以不去配置也可以。 但是如果被配置成false,这里就不会实现延迟加载。
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3714<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1648Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1457org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 866今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1051摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1289三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 644继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1010摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1442摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2447这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2507摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1874========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1291摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 874场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 587摘自圣思园Hibernate20.一 ... -
Hibernate的对象检索策略 (一) SQL左外连接检索策略
2013-11-20 15:32 1130首先是测试表的结构: 先通过hibernate将数据放入 ...
相关推荐
在本篇中,我们将深入探讨Hibernate的配置,特别是涉及一对一、一对多和多对多关系的配置。 首先,配置过程始于`Configuration`接口。这个接口用于设置Hibernate所需的配置信息,如数据源、连接参数等,并根据配置...
但是,可以通过设置`hibernate.cache.use_query_cache`来禁用查询缓存,防止对一级缓存造成影响。 ### 二级缓存 二级缓存是SessionFactory级别的,可以跨Session共享。相比一级缓存,二级缓存可以持久化存储,即使...
* `set`:定义一对多关联关系 这些配置项是 Hibernate 建立对象关系映射所需的基本信息。 Hibernate 配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。通过 hibernate.cfg.xml 和 .hbm.xml 文件,我们...
**标题:“Hibernate一对一”** **描述:** 这篇文章主要探讨了Hibernate框架中的一对一关系映射,这是一种在数据库设计中常见的关联方式。作者通过在博客中分享,详细讲解了如何在Java应用程序中使用Hibernate实现...
在JavaEE开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化...通过分析这些代码,你将能更好地掌握Hibernate一对多关系的配置和使用。同时,也可以尝试修改配置或业务逻辑,以加深理解和应用。
在Hibernate中,与数据库交互的第一步就是正确地配置数据库连接。以下是一些关键的配置参数及其含义: 1. **`hibernate.connection.driver_class`**:指定JDBC驱动程序的类名。例如,在PostgreSQL数据库中,这个...
通过这个实例,你将掌握在Java项目中使用Hibernate的基本流程,无论是普通Java工程还是Maven工程,都能轻松实现对数据库的操作。在实际开发中,你可以根据项目需求进一步优化配置,比如加入事务管理、查询优化等,以...
在 Hibernate 中,一对一关系可以通过注解或者 XML 配置文件来实现。 **三、配置一对一关系** 1. **注解方式**:在两个关联实体的属性上使用 `@OneToOne` 注解,并通过 `@JoinColumn` 或 `@PrimaryKeyJoinColumn` ...
一、Hibernate一对多关系 在现实世界中,一对多关系很常见,例如一个班级可以有多名学生。在数据库中,这对应于一个表(如班级表)有一条记录可以关联多条记录(如学生表)。在Hibernate中,我们通过配置XML文件来...
描述部分虽然为空,但我们可以根据标题推测,这篇内容可能涉及了如何在Hibernate中配置和使用一对一关联,包括实体类的设计、注解的使用以及数据库表的结构设计等。 **知识点详解** 1. **Hibernate ORM框架**: ...
本教程“Hibernate一对一实例”是为初学者设计的,旨在帮助你们理解并掌握Hibernate框架中的一对一映射关系。 一、Hibernate简介 Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者用Java对象来表示...
5. **缓存配置**:Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别)。开发者可以根据需求选择是否开启及配置二级缓存,例如,可以使用EhCache或Infinispan。 6. **事务管理**:Hibernate支持...
在代码开发完成后,需要对Hibernate的配置和实体类的映射进行测试,确保它们能够正确地工作。 在整个过程中,还需要注意Hibernate的版本兼容性问题,以及在配置文件中可能出现的字符编码问题。Hibernate本身提供了...
**标题:“Hibernate配置”** **概述** Hibernate是一个强大的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过提供一个抽象层,Hibernate允许开发人员使用面向对象的方式来处理数据库...
在Java开发过程中,特别是在使用ORM框架如Hibernate时,开发者经常需要对配置文件中的数据库连接信息进行动态修改或加密处理。本文将详细介绍如何利用反射机制来修改已经加载到内存中的`hibernate.cfg.xml`配置文件...
在Java Web开发中,SSH(Struts、Spring、Hibernate)是经典的三大框架,它们共同构建了一个强大的企业级应用开发环境。Hibernate作为一个优秀的对象关系映射(ORM)框架,极大地简化了数据库操作。在这个场景中,...
通过以上步骤,我们已经对Hibernate的基本配置和使用有了全面的认识。在实际项目中,还需要根据具体需求进行事务管理、缓存配置、性能优化等更高级的应用。对于`hibernate001`这个案例,它可能是进一步展示了这些...
压缩包中的`0000.sql`可能是数据库脚本文件,用于初始化数据库结构,而`hibernate-2`可能是另一个相关的文件或目录,可能包含了更多的配置示例或实体类定义。在实际开发中,我们需要结合这些资源来构建完整的...
在使用Hibernate的过程中,一个关键的配置文件是`hibernate.cfg.xml`。这个文件包含了Hibernate连接数据库所需的基本信息和其他配置参数。 #### 二、`hibernate.cfg.xml`文件结构 `hibernate.cfg.xml`文件的典型...
在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。本文将深入探讨Hibernate配置文件,这是使用Hibernate进行数据库...