`

Hibernate一对一的使用

阅读更多

数据库:
create table student
(
   id int identity(1,1) not null primary key,
   s_name varchar(50),
   s_sex varchar(20)
)
go
create table card
(
   id int primary key,
   address varchar(100),
   cardnum varchar(20)
)

select * from student
select * from card

delete from card
delete from student

Student.hbm.xml配置如下:(主对象)
<hibernate-mapping>
    <class name="com.mengya.entity.Student" table="student" schema="dbo" catalog="mp">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="SName" type="java.lang.String">
            <column name="s_name" length="50" />
        </property>
        <property name="SSex" type="java.lang.String">
            <column name="s_sex" length="20" />
        </property>
       
        <!-- 一对一时,没有inverse属性 --> 
        <one-to-one name="card" class="com.mengya.entity.Card" cascade="all"></one-to-one>
       
    </class>
</hibernate-mapping>

Card.hbm.xml配置如下:(从对象)
<hibernate-mapping>
 <class name="com.mengya.entity.Card" table="card" schema="dbo"
  catalog="mp">
  <id name="id" type="java.lang.Integer">
   <column name="id" />
   <generator class="foreign">
    <param name="property">student</param>
   </generator>
  </id>
  <property name="address" type="java.lang.String">
   <column name="address" length="100" />
  </property>
  <property name="cardnum" type="java.lang.String">
   <column name="cardnum" length="20" />
  </property>
  
  <one-to-one name="student" class="com.mengya.entity.Student"></one-to-one>
  
 </class>
</hibernate-mapping>

我的测试:
public class Test extends MySessionUtil {

 private Session session;

 private Transaction tran;
 
 public void save1(){
  Student stu=new Student();
  stu.setSName("张明学");
  stu.setSSex("男");
  
  Card card=new Card();
  card.setAddress("湖北武汉");
  card.setCardnum("421125198764212454");
  
  /*
   * 主方指定从方并且主方 cascade="all",若从方没有指定主方,会报错   * 也就是说,添加card时没有指定student错误
   */
  stu.setCard(card);
  //card.setStudent(stu);  
  session=this.GetSession();
  tran=session.beginTransaction();
  session.save(stu);
  tran.commit();
  session.close();
  
 }
 
 public void save2(){
  Student stu=new Student();
  stu.setSName("梦娅");
  stu.setSSex("女");
  
  Card card=new Card();
  card.setAddress("湖北黄冈");
  card.setCardnum("421125666546542789");
  
  /*
   * 从方指定主方,主方不指定从方,可以添加成功
   */
  card.setStudent(stu);  
  session=this.GetSession();
  tran=session.beginTransaction();
  session.save(card);
  tran.commit();
  session.close();
  
 }
 
 public void select(){
  /*
   * 一对一的查询时,对主方的查询也会自己对从方查询,即不能对从方懒加载
   * 因为查询主方时要对从方产生一个代理对象,而这个代理对象在主方中直接得不到,它要去查从方得到代理对象
   * 查询从方就可以进行懒加载
   */
  session=this.GetSession();
  Student stu=(Student) session.get(Student.class,new Integer(3));
  session.close();
  
  System.out.println(stu.getSName());
  System.out.println(stu.getCard().getCardnum());
  System.out.println(stu.getCard().getAddress());
 }
 
 public static void main(String[] args) {
  Test text=new Test();
  //text.save2();
  text.select();
 }

}

个人说明:在多对一中,若把多方中的一方设置为unique也可以变成一对一的关系。

分享到:
评论
2 楼 imacback 2012-06-21  
不错。浅显易懂
1 楼 uu22 2009-04-22  
加油!!!

相关推荐

    Hibernate一对一

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

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

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

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

    Hibernate 一对一

    **标题:“Hibernate 一对一”** **一、Hibernate 概述** Hibernate 是一款强大的 Java 开源对象关系映射(ORM)框架,它简化了数据库与 Java 应用程序之间的交互。ORM 解决了 Java 对象与 SQL 数据库之间的类型不...

    hibernate一对一实例

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

    hibernate一对一

    hibernate一对一关系映射,我们需要学习的内容包括知识点

    hibernate 一对多和多对一的理解

    hibernate 一对多和多对一的理解 自己的个人看法 大家也来看看

    Hibernate一对一关系源码

    本主题聚焦于Hibernate中的一对一(OneToOne)关系的源码分析,这对于理解Hibernate的工作原理和优化数据访问性能至关重要。 在Hibernate中,一对一关系是指两个实体类之间存在一个唯一的对应关系,通常通过主键...

    Hibernate 一对一,一对多,多对多例子

    “Hibernate 一对一,一对多,多对多例子” 指的是使用Hibernate框架实现数据库中不同关联关系的示例。Hibernate是一个Java持久化框架,它提供了对象关系映射(ORM)功能,使得开发人员可以方便地在Java对象和关系...

    Hibernate一对一,多对一关系源码

    本篇文章将深入探讨Hibernate中的一对一(OneToOne)和多对一(ManyToOne)关系的源码实现。 **一对一(OneToOne)关系** 在现实生活中,一对一是指两个实体之间存在唯一的关系,例如一个人可能只有一张身份证。在...

    Hibernate双向一对多经典实例

    **标题:“Hibernate双向一对多经典实例”** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用面向对象的方式处理数据。本实例将聚焦于Hibernate中的一对多关系...

    hibernate一对多,多对一,一对多双向关联

    1. **关联类型:** Hibernate支持四种基本的关联类型,包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:**...

    hibernate源码 直接使用

    - **一对一(One-to-One)**: 使用@OneToOne注解,可以定义实体之间的一对一关系。这通常通过主键外键约束实现。 - **一对多(One-to-Many)**: @OneToMany注解用于表示一个实体可以拥有多个相关实体,如一个用户...

    使用 Hibernate Shards 对数据进行切分

    《使用Hibernate Shards对数据进行切分》 在大规模分布式系统中,数据库的扩展性问题一直是开发者关注的重点。Hibernate Shards是Hibernate框架的一个扩展,它提供了数据库分片(Sharding)的功能,帮助解决高并发...

    struts+hibernate一对多的管理系统

    在这个“Struts+Hibernate一对多的管理系统”项目中,我们将深入理解这两个框架如何协同工作,构建出一个具备一对多关系的数据管理应用。在Java Web开发中,一对多关系非常常见,比如在一个用户可以拥有多个订单的...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

    Hibernate教程04_关系映射之一对一单向外键关联

    **描述分析:**描述链接指向了CSDN上的一篇文章,文章详细介绍了如何在实际项目中使用Hibernate实现一对一单向外键关联。源码是配合教程的示例代码,帮助读者理解并实践所学知识。 **标签解析:“Hibernate 一对一...

    Hibernate使用指南tutorial

    - **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等多种关联关系的映射。 - **懒加载**:延迟加载策略可以在需要时才加载关联对象,提高性能。 - **级联操作**:可以设置级联关系,使得对父对象的操作...

    Hibernate级联操作一对多demo

    在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...

Global site tag (gtag.js) - Google Analytics