`

Hibernate一对一配置

阅读更多
摘自圣思园 19.Hibernate的对象检索策略深度解析.avi 后半部分

一对一映射:
主键关联。

测试数据:
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,这里就不会实现延迟加载。
  • 大小: 23.3 KB
  • 大小: 238 KB
分享到:
评论

相关推荐

    Hibernate的配置详解

    在本篇中,我们将深入探讨Hibernate的配置,特别是涉及一对一、一对多和多对多关系的配置。 首先,配置过程始于`Configuration`接口。这个接口用于设置Hibernate所需的配置信息,如数据源、连接参数等,并根据配置...

    hibernate一级和二级缓存配置与详解

    但是,可以通过设置`hibernate.cache.use_query_cache`来禁用查询缓存,防止对一级缓存造成影响。 ### 二级缓存 二级缓存是SessionFactory级别的,可以跨Session共享。相比一级缓存,二级缓存可以持久化存储,即使...

    hibernate配置文件详解

    * `set`:定义一对多关联关系 这些配置项是 Hibernate 建立对象关系映射所需的基本信息。 Hibernate 配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。通过 hibernate.cfg.xml 和 .hbm.xml 文件,我们...

    Hibernate一对一

    **标题:“Hibernate一对一”** **描述:** 这篇文章主要探讨了Hibernate框架中的一对一关系映射,这是一种在数据库设计中常见的关联方式。作者通过在博客中分享,详细讲解了如何在Java应用程序中使用Hibernate实现...

    hibernate一对多项目

    在JavaEE开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化...通过分析这些代码,你将能更好地掌握Hibernate一对多关系的配置和使用。同时,也可以尝试修改配置或业务逻辑,以加深理解和应用。

    hibernate配置参数大全

    在Hibernate中,与数据库交互的第一步就是正确地配置数据库连接。以下是一些关键的配置参数及其含义: 1. **`hibernate.connection.driver_class`**:指定JDBC驱动程序的类名。例如,在PostgreSQL数据库中,这个...

    JAVA 使用hibernate配置实例

    通过这个实例,你将掌握在Java项目中使用Hibernate的基本流程,无论是普通Java工程还是Maven工程,都能轻松实现对数据库的操作。在实际开发中,你可以根据项目需求进一步优化配置,比如加入事务管理、查询优化等,以...

    Hibernate 一对一

    在 Hibernate 中,一对一关系可以通过注解或者 XML 配置文件来实现。 **三、配置一对一关系** 1. **注解方式**:在两个关联实体的属性上使用 `@OneToOne` 注解,并通过 `@JoinColumn` 或 `@PrimaryKeyJoinColumn` ...

    Hibernate ORM - 一对一连接表关联关系

    描述部分虽然为空,但我们可以根据标题推测,这篇内容可能涉及了如何在Hibernate中配置和使用一对一关联,包括实体类的设计、注解的使用以及数据库表的结构设计等。 **知识点详解** 1. **Hibernate ORM框架**: ...

    hibernate一对一实例

    本教程“Hibernate一对一实例”是为初学者设计的,旨在帮助你们理解并掌握Hibernate框架中的一对一映射关系。 一、Hibernate简介 Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者用Java对象来表示...

    Hibernate程序的配置文件

    5. **缓存配置**:Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别)。开发者可以根据需求选择是否开启及配置二级缓存,例如,可以使用EhCache或Infinispan。 6. **事务管理**:Hibernate支持...

    配置hibernate数据源

    在代码开发完成后,需要对Hibernate的配置和实体类的映射进行测试,确保它们能够正确地工作。 在整个过程中,还需要注意Hibernate的版本兼容性问题,以及在配置文件中可能出现的字符编码问题。Hibernate本身提供了...

    Hibernate配置

    **标题:“Hibernate配置”** **概述** Hibernate是一个强大的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过提供一个抽象层,Hibernate允许开发人员使用面向对象的方式来处理数据库...

    Hibernate配置文件加载后修改配置信息

    在Java开发过程中,特别是在使用ORM框架如Hibernate时,开发者经常需要对配置文件中的数据库连接信息进行动态修改或加密处理。本文将详细介绍如何利用反射机制来修改已经加载到内存中的`hibernate.cfg.xml`配置文件...

    Hibernate的配置文件

    在Java Web开发中,SSH(Struts、Spring、Hibernate)是经典的三大框架,它们共同构建了一个强大的企业级应用开发环境。Hibernate作为一个优秀的对象关系映射(ORM)框架,极大地简化了数据库操作。在这个场景中,...

    Hibernate之配置使用案例hibernate001

    通过以上步骤,我们已经对Hibernate的基本配置和使用有了全面的认识。在实际项目中,还需要根据具体需求进行事务管理、缓存配置、性能优化等更高级的应用。对于`hibernate001`这个案例,它可能是进一步展示了这些...

    hibernate--5.Hibernate配置文件详解

    压缩包中的`0000.sql`可能是数据库脚本文件,用于初始化数据库结构,而`hibernate-2`可能是另一个相关的文件或目录,可能包含了更多的配置示例或实体类定义。在实际开发中,我们需要结合这些资源来构建完整的...

    Hibernate配置文件

    在使用Hibernate的过程中,一个关键的配置文件是`hibernate.cfg.xml`。这个文件包含了Hibernate连接数据库所需的基本信息和其他配置参数。 #### 二、`hibernate.cfg.xml`文件结构 `hibernate.cfg.xml`文件的典型...

    hibernate--5.Hibernate配置文件详解-2

    在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。本文将深入探讨Hibernate配置文件,这是使用Hibernate进行数据库...

    Hibernate自动生成配置文件

    ### Hibernate自动生成配置文件详解 #### 一、Hibernate与自动生成配置文件的重要性 ...因此,掌握并熟练运用MyEclipse中Hibernate配置文件的自动生成功能,对任何级别的Java开发者来说都是一项极为有价值的技能。

Global site tag (gtag.js) - Google Analytics