数据库表与表之间的关联关系,分为三种一对一、一对多、多对一、多对多。
在通常的数据库设计的时候一般都是通过表外键来建立各种关系,做这些关系一般都是为了一些级联操作。
由于Hibernate是把数据库中表与表之间的关系型数据映射成面向对象型的数据关系,在hibernate中,也做了相应的数据级联操作的工作。因而可以在数据层来完成数据库表的关联,可以在这一层通过面向对象的方式形象的完成级联操作,这时不需要在数据库表里建立复杂的外键关联也可以实现。
在网上和书上看到很多介绍这方面的知识,一般都是按照一对一、一对多、多对一、多对多的顺序介绍,为了容易理解,我通过另一种顺序:
一般多对多的实现都是通过第三个表来实现,在hibernate里也不例外,我们可以分析出这个第三方表与另外两个表就是多对一的关系。
一对一的关系可以看作是一对多的特殊情况。
一对多与多对一可以看作仅仅是方向的不同而已。
所以我先介绍一对多,然后 一对一,然后多对多。
一对多与多对一关联关系
在hibernate中关联关系一般都是通过外键来关联的,(我在学习的时候也有个错误的理解,这个外键不是在数据库表上建立的,经过试验在数据库中不建立外键关系,只在hibernate中设置完全可以实现同样的效果),这时的关联可以分为单向与双向两种。
所谓的单向就是说,在两端中的任一端不知知道另一端的存在,而另一端确清楚的小的另一端;双向当然就是双方互知了。
1、单向关联
在hibernate里面一对多关联关系的实现实在“一”的一段映射文件中使用<one-to-many>节点实现的,同时要求在“一”端的POJO使用集合来存储“多段”的对象。
在以下例子中我将实现一个留言板程序。
先完成数据库的一部分设计,首先需要一个表来存储用户信息,然后还需要一个表来存放留言信息,具体的SQL语句如下(我采用的是MySQL数据库):
CREATE TABLE `user` (
`usr_id` int(11) NOT NULL auto_increment,
`usr_name` char(20) default NULL,
`usr_psw` char(20) default NULL,
PRIMARY KEY (`usr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
CREATE TABLE `message` (
`msg_id` int(11) NOT NULL auto_increment,
`msg_ttl` char(20) NOT NULL default 0,
`msg_desc` char(50) default NULL,
`msg_date` Date,
`usr_id` int(11)NOT NULL default 0,
PRIMARY KEY (`msg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
显然这是个一对多的例子,相应的POJO类为
public class Message {
private int msgId;
private String ttl;
private String desc;
private Date date;
public class UserInfo {
private int userId;
private String name;
private String password;
private IdCard idCard;
private Set messages;
这里我省了get,set方法
相应的映射文件配置:
<hibernate-mapping>
<class name="xiaojin.hibernate.entity.UserInfo" table="USER">
<id name="userId" type="int" column="usr_id">
<generator class="native"/>
</id>
<property name="name" column="usr_name" type="string" />
<property name="password" column="usr_psw" type="string" />
<set name="messages" order-by="usr_id" cascade="all">
<key column="usr_id" />
<one-to-many class="xiaojin.hibernate.entity.Message" />
</set>
</class>
</hibernate-mapping>
这个配置文件最主要的就是这个节点
<set name="messages" order-by="usr_id" cascade="all">
<key column="usr_id" />
<one-to-many class="xiaojin.hibernate.entity.Message" />
</set>
这个<set>节点意味着POJO UserInfo类里面定义一个集合,在这个节点中:
<key>:指定多端的外键,与一端的主键相关联,即MESSAGE表中的usr_id
<one-to-many>:指定多端的对应的类
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="xiaojin.hibernate.entity.Message" table="MESSAGE">
<id name="msgId" type="int" column="msg_id">
<generator class="native"/>
</id>
<property name="ttl" column="msg_ttl" type="string" not-null="true"/>
<property name="desc" column="msg_desc" type="string" not-null="true"/>
<property name="date" column="msg_date" type="string" />
多对一的映射与上面完全一样,只不过需要在多的一段进行配置,即在message的应射文件中需要配置<many-to-one>节点:
<many-to-one name="user" column="usr_id" />
分享到:
相关推荐
### Hibernate关联关系详解 在Java开发领域中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了方便地操作数据库的方式。通过将Java对象与数据库表进行映射,Hibernate大大简化了数据持久化层的...
hibernate关联关系详解 在Java Persistence API (JPA) 和 Hibernate 框架中,实体之间的关联关系是数据模型的重要组成部分。关联关系允许我们定义不同实体类之间的联系,如一对一、一对多、多对一和多对多。本文将...
一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...
Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...
总之,Hibernate关联关系是理解其工作原理的关键,它使得Java对象和数据库记录之间的映射变得简单。通过练习,你可以掌握如何配置和使用这些关系,以及如何进行相关的查询操作,从而提升你的开发效率和代码质量。...
在这个“hibernate关联关系实例”中,我们将深入探讨四种基本的关联关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many),同时也会涉及Hibernate查询语言(HQL)...
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...
在深入探讨Hibernate关联关系映射分类之前,我们首先简要回顾一下Hibernate框架的基本概念。Hibernate是一种持久层框架,主要用于Java应用程序中的对象关系映射(ORM),它能够将面向对象的数据模型转换为数据库中的...
在本项目中,"hibernate关联关系2"是一个关于使用Hibernate框架处理数据库关联关系的实战案例。Hibernate是一个流行的开源对象关系映射(ORM)工具,它允许开发人员使用Java对象来操作数据库,极大地简化了数据库...
Hibernate4中映射关系图解。
在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...
本篇文章将详细讲解Hibernate的两种单向关联关系:单向1-N关联和单向N-1关联。 1. **单向1-N关联** 在这种关联关系中,一个实体(1端)可以与多个其他实体(N端)相关联。在Hibernate中,通常在1端的实体类中引入...
"hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...
本篇文章将深入探讨Hibernate中常见的几种关联关系及其基本配置。 一、一对一(OneToOne)关联 在一对一关联中,一个实体对象只对应数据库中的一个记录。配置方式通常通过`@OneToOne`注解实现,可以设置`mappedBy`...
### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...
### Hibernate关联关系配置详解 #### 一、一对多与多对一关系配置 在软件开发过程中,实体之间的关联关系是常见的需求之一。其中,“一对多”与“多对一”的关系尤为常见,这类关系通常用来表示实体之间的层级或...
Hibernate关联关系映射.CHM Hibernate文档相关
本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...
【hibernate的关联关系映射】在Java持久化框架Hibernate中,关联关系映射是核心功能之一,它允许对象间的复杂关系与数据库中的表结构相匹配。在选课系统这个例子中,主要涉及到的对象包括课题(Course)、教师(Teacher...
这篇博客"Hibernate关联关系疑问"可能探讨了在使用Hibernate处理对象关系映射(ORM)时遇到的一些关联问题。在ORM中,关联关系是数据库表之间的连接,如一对一、一对多、多对一和多对多关系。 1. **一对一关联...