`
Wind_ZhongGang
  • 浏览: 263723 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate ORM - 一对一外键关联关系

阅读更多

 

  对于持久化实体间一对一的关联关系来说,在代码层面来看,没有什么太大的问题,如果你想建立一个一对一的单向关联关系,那么只需要在代码中增加一个对对方实体的引用即可,如果你想建立一个一对一的双向关联关系,那么只需要在双方实体中增加对对方实体的引用即可。而从数据表创建的层面上来看,则会根据你对持久化实体的配置文件的不同配置而有所不同。所以对于一对一关联关系,重点在于你在数据表层面上想怎样实现这样的关联关系,主要有两种方式,一种方式是在某一方的表中增加一个外键标识符字段,用来保持双方的一对一关联关系,还有一种方式则是将某一方实体的主键字段同时作为外键字段用来保持两者的一对一关联关系。具体的做法则会因你的项目的具体需求而定。而至于两者的差异则显而易见,主要体现在数据表上,第一种方式会比第二种方式多配置一个字段,而第二种方式则有一个好处就是两者的主键标识符字段会始终保持一致性。下面就来看看一对一外键双向关联关系。

 

  一。Husband

 

package com.orm.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/18/11
 * Time: 3:23 PM
 */
public class Husband extends DomainObject {
    private String name;

    private Wife wife;

    public Husband() {
    }

    public Husband(String name, Wife wife) {
        this.name = name;
        this.wife = wife;
    }
}

 

<?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">

<hibernate-mapping default-access="field">

    <class name="com.orm.model.Husband" table="husband">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>

        <many-to-one name="wife"  column="wifeid" class="com.orm.model.Wife" cascade="all" unique="true"/>
    </class>

</hibernate-mapping>

 

  二。Wife

 

package com.orm.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/18/11
 * Time: 3:23 PM
 */
public class Wife extends DomainObject {
    private String name;

    private Husband husband;

    public Wife(String name) {
        this.name = name;
    }

    public Wife() {
    }
}

 

<?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">

<hibernate-mapping default-access="field">

    <class name="com.orm.model.Wife" table="wife">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>

        <one-to-one name="husband" class="com.orm.model.Husband"/>
    </class>

</hibernate-mapping>

 

  三。测试类

 

package com.orm;

import com.orm.model.Husband;
import com.orm.model.Wife;
import com.orm.service.CoupleService;
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/18/11
 * Time: 3:40 PM
 */
public class HibernateOneToOneSingleDirectionTest extends TestCase {
    private CoupleService coupleService;

    @Override
    public void setUp() throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:testDataSource.xml");
        coupleService = (CoupleService) context.getBean("coupleService");
    }

    public void testOneToOneSingleDirection() throws Exception {
        Wife wife = new Wife("wife");

        Husband husband = new Husband("husband", wife);

        coupleService.saveOrUpdate(husband);
    }

}

 

  四。测试结果截图

 

  hql

 

  table

 

  这就是一个典型的一对一外键双向关联关系的实现方式。如果你需要的不是双向的而是单向的,比如说在这里你需要的是Husband持有Wife的引用,而Wife不能持有Husband的引用,那么具体做法就是删除Wife代码中对Husband的引用,并且删除Wife配置文件中的one-to-one标签。相反的话你则需要将Husband代码中对Wife的引用删除,并且将Husband配置文件中的many-to-one标签删除,并且将Wife的配置文件中的one-to-one标签以<many-to-one name="husband"  column="husbandid" class="com.orm.model.Husband" cascade="all" unique="true"/>进行替换。最后附上源码附件。

  • 大小: 18.4 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

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

    标题"Hibernate ORM - 一对一连接表关联关系" 提示我们,这里主要讨论的是Hibernate ORM框架在处理数据库中一对一(One-to-One)关联映射的方法。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者用...

    Hibernate ORM - 一对多双向关联关系

    这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...

    Hibernate ORM - 一对多双向组合关联关系

    **标题解析:** "Hibernate ORM - 一对多双向组合关联关系" 这个标题表明我们要讨论的是Hibernate ORM框架中的一种特定的数据关系映射——一对多双向组合关联。在关系型数据库中,一对多关联意味着一个父实体可以与...

    Hibernate ORM - 一对一主键关联关系

    综上所述,Hibernate ORM 的一对一主键关联关系是通过共享主键或外键约束来实现两个实体间的唯一对应。在实际应用中,开发者需要根据需求选择合适的关联方式,并注意关联带来的性能影响。通过理解并熟练掌握这些配置...

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    hibernate-orm-master.zip

    Hibernate支持多种关联映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。这些关联可以通过定义外键或使用中间表来实现,使得对象间的复杂关系得以轻松处理。 ...

    hibernate一对一之唯一外键关联(双向关联)

    本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...

    Hibernate ORM - 多对多双向中间实体关联关系

    2. **在主实体类中添加关联**:在User和Role类中,我们需要定义一对多的关系。在双向关联中,每个实体都需要知道对方的存在。 ```java @Entity public class User { @Id private Long id; // other fields @...

    Hibernate一对一单向外键关联(annotation/xml)

    本篇将深入探讨Hibernate中的一对一单向外键关联,通过注解和XML配置两种方式进行实现。这种关联允许一个实体类与另一个实体类之间存在一对一的关系,并且只在其中一个实体类中维护这种关系。 首先,我们来理解一对...

    Hibernate教程05_关系映射之一对一双向外键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一”双向外键关联。这种关联类型在数据库设计中很常见,尤其是在处理具有紧密耦合的实体时。Hibernate作为Java中广泛使用的对象关系...

    hibernate一对一唯一外键关联映射(双向关联)

    本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...

    hibernate一对一之唯一外键关联(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,用于表示两个实体之间一对一的关系。在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single...

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

    **标题详解:**“Hibernate教程04_关系映射之一对一单向外键关联” 在Hibernate框架中,关系映射是数据库表之间的关联在对象模型中的体现。本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库...

    Hibernate一对一唯一外键关联映射(双向关联)

    总结一下,`Hibernate`中的一对一唯一外键关联映射是一种强关联关系,它在数据库层面表现为一个表中的字段作为另一个表的主键或唯一键。双向关联提供了双向导航的能力,增强了代码的可读性和易用性。通过注解或XML...

    hibernate一对一外键关系

    在Hibernate中,实现一对一外键关系有几种方式,包括使用主键关联(Primary Key Association)和使用外键关联(Foreign Key Association)。我们首先来看主键关联: 1. **主键关联**:在这种模式下,一方实体的主键...

    Hibernate 一对一外键单向关联

    首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种关联通常体现在数据库设计中,比如一个用户只有一个账户,...

    hibernate外键实现一对一单向关联关系源码

    以上就是关于Hibernate外键实现一对一单向关联关系的详细说明。这个知识点涉及到数据库设计、ORM框架的使用,以及Java编程实践,对于理解和使用Hibernate进行数据库操作具有重要意义。在实践中,应结合具体业务场景...

    详解Hibernate一对一映射配置

    在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体之间一对一的关系。这种关系通常出现在一个实体的实例只能与另一个实体的单个实例相关联的情况。下面我们将...

Global site tag (gtag.js) - Google Analytics