`
baobeituping
  • 浏览: 1068593 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Hibernate 以外键关联

阅读更多

以学生(STUDENT)和身份证(CARD)为例子:

建表语句:

Student:

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` varchar(255) default NULL,
  `TeamID` int(11) default NULL,
  PRIMARY KEY  (`ID`),
  KEY `F_Team` (`TeamID`),
  CONSTRAINT `F_Team` FOREIGN KEY (`TeamID`) REFERENCES `team` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=gbk;

 

Card:

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for card
-- ----------------------------
DROP TABLE IF EXISTS `card`;
CREATE TABLE `card` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` varchar(255) default NULL,
  `StudentID` int(11) default NULL,
  PRIMARY KEY  (`ID`),
  KEY `F_Student` (`StudentID`),
  CONSTRAINT `F_Student` FOREIGN KEY (`StudentID`) REFERENCES `student` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gbk;

配置文件:

Student.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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.vo.Student" table="student" catalog="test" batch-size="3">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" >
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="Name" />
        </property>
               <one-to-one name="cardID" class="com.vo.Card" cascade="all" fetch="join"></one-to-one>
    </class>
</hibernate-mapping>

Card.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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.vo.Card" table="card" catalog="test">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="Name" />
        </property>
        <many-to-one name="student" column="StudentID" class="com.vo.Student"  unique="true"></many-to-one>
    </class>
</hibernate-mapping>

红色字体部分:以外键关联的一对一,本质上变成了一对多的双向关联,最后再many-to-one这一边加上unique=true表示他是一对多的特列。

客户端:

public static void main(String[] args) {
  Session session = SessionUtil.getSession();
  Transaction tran = session.beginTransaction();
  Student stu = new Student();
  stu.setName("BOSS");
  Card card = new Card();
  card.setName("身份证BOSS");
  stu.setCardID(card);
  card.setStudent(stu);
  session.save(stu);
  tran.commit();
  session.close();

 }

 

one-to-one 默认的级联关系为预先抓取

 

Student stu = (Student)session.get(Student.class,36 );

 

打印:

Hibernate: select student0_.ID as ID1_2_, student0_.Name as Name1_2_, student0_.TeamID as TeamID1_2_, team1_.ID as ID0_0_, team1_.Name as Name0_0_, card2_.ID as ID2_1_, card2_.Name as Name2_1_, card2_.StudentID as StudentID2_1_ from test.student student0_ left outer join test.team team1_ on student0_.TeamID=team1_.ID left outer join test.card card2_ on student0_.ID=card2_.ID where student0_.ID=?

如果想改成延迟加载:

1.在student.hbm.xml

加上constrained="true"

<one-to-one name="cardID" class="com.vo.Card" cascade="all"  constrained="true"></one-to-one>

2.

加上lazy=true,lazy=proxy

card.hbm.xml

<class name="com.vo.Card" table="card" catalog="test" lazy="true">

 

 <many-to-one name="student" column="StudentID" class="com.vo.Student"  unique="true" lazy="proxy"></many-to-one>

 

重新运行代码打印:

Hibernate: select student0_.ID as ID1_0_, student0_.Name as Name1_0_ from test.student student0_ where student0_.ID=?

分享到:
评论

相关推荐

    hibernate关联映射详解

    hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...

    Hibernate多表关联配置及错误解决方法

    在处理多表关联时,Hibernate提供了多种关联类型,包括一对一(OneToOne),多对一(ManyToOne),一对多(OneToMany)和多对多(ManyToMany)。本文将详细介绍这些关联配置以及如何解决可能出现的错误。 **一对一关联...

    hibernate各种常用关联关系的基本配置

    本篇文章将深入探讨Hibernate中常见的几种关联关系及其基本配置。 一、一对一(OneToOne)关联 在一对一关联中,一个实体对象只对应数据库中的一个记录。配置方式通常通过`@OneToOne`注解实现,可以设置`mappedBy`...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

    hibernate一对多关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个关联实体(如订单)。在这个场景中,"一"通常代表父实体,"多"代表子实体。这篇博客文章...

    Hibernate 关联关系解除

    本文将深入探讨Hibernate中的关联关系解除,包括一对多、多对一、一对一以及多对多关系的解除,以及如何通过源码理解和使用相关工具进行操作。 一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种...

    hibernate关联关系总结

    Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate 多表关联 中间表

    在处理多表关联时,Hibernate提供了一种高效且灵活的方法,尤其是当涉及到中间表的情况。中间表通常用于实现多对多(Many-to-Many)的关系,比如在一个用户和角色的关系中,一个用户可以有多个角色,一个角色也可以...

    hibernateHQL关联查询

    ### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...

    hibernate的表关联操作-hibernate02

    本篇主要围绕"hibernate的表关联操作"展开,通过映射关系来实现对实体类的增删改查,帮助我们深入理解Hibernate的核心机制。 首先,我们要明白什么是表关联。在数据库设计中,关联是表与表之间的连接,通常由外键...

    hibernate映射关系关联查询

    关于hibernate的关联操作 分享下

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

    全面解读hibernate关联关系

    hibernate关联关系详解 在Java Persistence API (JPA) 和 Hibernate 框架中,实体之间的关联关系是数据模型的重要组成部分。关联关系允许我们定义不同实体类之间的联系,如一对一、一对多、多对一和多对多。本文将...

    hibernate关联查询 实例源码

    hibernate关联查询 实例源码 java web 如果不明白hibernate关联查询不明白的可以看看,保证马上学会,注释,数据库都有,很简单易学的源码,谢谢下载!

    hibernate实现多对多关联关系源码

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联关系是一种常见的实体间关系类型,它表示一个实体可以与多个其他实体相关联,反之亦然。本源码示例将深入探讨如何使用Hibernate来配置和管理这种复杂的...

    hibernate一对一关联关系

    在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...

    Hibernate关联映射

    9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...

    Hibernate关联关系练习【全】

    本练习主要涵盖了Hibernate中的关联关系,这是理解Hibernate核心概念的重要一环。 首先,我们需要理解什么是关联关系。在数据库设计中,关联通常指的是表与表之间的连接,例如一对一、一对多、多对一和多对多关系。...

Global site tag (gtag.js) - Google Analytics