`
yunhuisdu19811011
  • 浏览: 94690 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论
  • fightingIOW: 案例看了,能实现上传,但是不是异步的,怎么改成页面可以预览呢? ...
    swfUpload实例
  • kizz: 您好,实例我看了,确实不错。您有struts2版的吗?现在项目 ...
    swfUpload实例

hibernate关系映射(1--1)

    博客分类:
  • java
阅读更多

   Hibernate将表之间的关系映射成对象之间的关系

单向关系

1,1--1  (外键一对一,主键一对一)

2,1--N

3,N--1

4,N--N

双向关系

1,1--1

2,1--N(N--1)

3,N--N

 

 

(1) 1--1( 单向 外键一对一)

  

    基于外键关联的单向一对一关联 和单向多对一关联 几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。

第一步:// 数据库中创建表 表的关系映射

create table Person ( personId bigint not null primary key, addressId bigint not null unique )
create table Address ( addressId bigint not null primary key )

 

第二步:// 创建类, 对象的关系映射

// 人员类
public class  Person
{
private int id;
private Address address; // 包含了对方的引用 
}

//地址类
public class Address{
private int id;
}

 

第三步:xml的配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

    <many-to-one name="address"   --本类中的属性名
        column="addressId"    --本类对应表中的列名
        class = "Address"    --本类所关联对方的类
        unique="true" --可以对对方的引用进行唯一性约束(一对一的关系),也可以不进行唯一性约束(对象之间多对一的关系)

        cascade = "all" -- 表明操作是否从父对象级联到被操作的对象
        not-null="true"/> -- 必须加上, 保证两个表的关系
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>

 

第四步: 创建对象,保存到数据库

// 先创建被引用的对象
Address address = new Address();
// 创建引用对象,并给被引用的对象赋值
Person person = new Person();
person.address = address;
// 保存对象
 session.save(address); 
 session.save(person );

 

 

(2)1--1( 双向 外键一对一)

第一步:表的结构和【(1)单向 1--1(外键一对一)】的表结构是没有变化

第二步: 只是再Address中增加了Person的引用

 

// 人员类
public class  Person
{
private int id;
private Address address; // 包含了对方的引用 
}

//地址类
public class Address{
private int id;

// 增加了person对象的引用

private Person person;
}

 

第三步:xml的配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

    <many-to-one name="address"   --本类中的属性名
        column="addressId"    --本类对应表中的列名
        class = "Address"    --本类所关联对方的类
        unique="true" --可以对对方的引用进行唯一性约束(一对一的关系),也可以不进行唯一性约束(对象之间多对一的关系)

        cascade = "all" -- 表明操作是否从父对象级联到被操作的对象
        not-null="true"/> -- 必须加上, 保证两个表的关系
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>

-- 增加了以下的xml配置

  <one-to-one name="person"  // 在本类中的属性名字

         class = "Person"    // 被引用对象的类名

         property-ref="address"/> // 关联类的属性名和本类的主键相对应
</class>

 

(3)1--1(单向 共享主键关联)

第一步:表的结构 :

create table Person ( personId bigint not null primary key )
create table Address ( addressId bigint not null primary key )

 

第二步:类的创建 对象之间关系映射

public class Person{

  private int personId;

}

 

public class Address{

 private int addressId ;

 private Person person; // 在表中没有映射的外键

}

 

第三步:xml配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
</class>

<class name="Address">
    <id name="id" column="addressId ">
        <generator class="foreign">
            <param name="property">person</param>
        </generator>

    </id>


    <one-to-one name="person"    constrained="true"  -- 取值必须从外键中取 (必须加上)

       class="Person "  cascade="true" />
</class>

 

第四步:创建对象, 保存到数据库

Person person = new Person();  //创建被依赖的对象

 

Address address = new Address(); // 创建依赖对象

address.setPerson(person);

 

session.save(address ); // 保存依赖对象

 

(4)1--1(双向  共享主键关联)

第一步:表的结构 : 数据库和(3)是一样的

create table Person ( personId bigint not null primary key )
create table Address ( addressId bigint not null primary key )

 

第二步:类的创建 对象之间关系映射

public class Person{

  private int personId;

  private Address address; // 增加了address属性,但是在表中是没有映射字段的

}

 

public class Address{

 private int addressId ;

 private Person person; // 在表中没有映射的外键

}

 

第三步:xml的配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

   <one-to-one  name="address" class="Address " cascade="true"/> //增加了one-to-one的配置
</class>

<class name="Address">
    <id name="id" column="addressId ">
        <generator class="foreign">
            <param name="property">person</param>
        </generator>

    </id>


    <one-to-one name="person"    constrained="true"  -- 取值必须从外键中取 (必须加上)

       class="Person "  cascade="true" />
</class>

 

第四步:创建对象保存数据库 保存对象书顺序是没有改变的 (要先保存自动生成主键的对象)

Person person = new Person();  //创建被依赖的对象

 

Address address = new Address(); // 创建依赖对象

address.setPerson(person);

 

session.save(address ); // 保存依赖对象

 

分享到:
评论

相关推荐

    Hibernate实体关联关系映射--学习总结.pdf

    Hibernate实体关联关系映射--学习总结.pdf

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而Eclipse作为主流的Java集成开发环境,其丰富的插件生态使得开发效率得以提升。"hibernatetools-Update-4.1.1.Final_...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-configuration-3.0.dtd`和`hibernate-mapping-3.0.dtd`是Hibernate 3.0版本中的两个核心文件,它们定义了...

    Hibernate one-to-many / many-to-one关系映射

    在Java的持久化框架Hibernate中,关系映射是数据库对象之间的关联方式,它允许我们将复杂的数据库结构映射到Java对象上。"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605

    Hibernate Tools是开发者在使用Hibernate框架进行Java应用程序开发时的重要辅助工具,它为Eclipse IDE提供了强大的集成支持,包括对象关系映射(ORM)的可视化设计、逆向工程、数据库生成、HQL和SQL查询编辑等功能。...

    Hibernate_实体关联关系映射--学习总结

    Hibernate是目前广泛使用的持久层框架,它采用对象关系映射(ORM)技术,将Java对象映射到关系型数据库中。在使用Hibernate进行数据持久化操作时,如何处理实体之间的关联关系是一个非常重要的方面。实体关联关系映射...

    hibernate many-to-many级联保存,级联更新,级联删除

    在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据库表之间的关联方式,它表示一个实体可以与多个其他实体进行关联,反之亦然。本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    hibernate-commons-annotations-5.0.1.Final.jar

    1. `org.hibernate.annotations`:这是HCA提供的核心注解库,包括`@GeneratedValue`、`@Temporal`、`@JoinColumn`等,这些注解在Java源码中使用,用于描述实体类的持久化行为。 2. `org.hibernate.annotations....

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip)

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

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

    在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键,另一个实体作为关联目标。这种关联方式可以分为单向关联和双向关联两种。 单向关联是指一个实体作为外键,关联到另一个...

    hibernate-release-5.2.10

    Hibernate是Java平台上的一款开源对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。在SSH(Spring、Struts、Hibernate)框架中,Hibernate作为持久层的解决方案,极大地简化了数据库操作的...

    Hibernate稳定版(hibernate-release-5.6.2.Final.zip)

    Hibernate稳定版(hibernate-release-5.6.2.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    Hibernate关系映射

    **标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...

    Hibernate4(关系映射-事务-原理-性能和二级缓存-最佳实践)

    1. 关系映射:在Hibernate框架中,关系映射是指对象与数据库表之间关系的定义。关系的数据库表示可以分为一对一、一对多和多对多三种类型。例如,一个部门表和一个部门主管表之间是一对一关系,而一个部门表和下属...

    Hibernate hibernate-core-1a8aca9.ta

    Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够用面向对象的方式来处理数据,而无需关注底层的SQL语句。`hibernate-core-1a8aca9.ta`是Hibernate的核心组件...

    Hibernate源码(hibernate-orm-main.zip)

    Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    Hibernate稳定版(hibernate-release-5.4.32.Final.zip)

    Hibernate稳定版(hibernate-release-5.4.32.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    Hibernate-Extension Middlegen-Hibernate

    Hibernate的核心功能包括:持久化类、对象-关系映射、查询语言HQL等。 Middlegen,全称为Middle Generation,是针对Hibernate的一个扩展工具,它的主要作用是自动生成基于Hibernate的持久化类、映射文件和相关的DAO...

Global site tag (gtag.js) - Google Analytics