对于一对一的关联关系,除了为其中一方的数据表增加外键字段外,另一种做法就是将其中一方的标识符字段即作为主键又作为保持两者一对一关联关系的外键字段。下面来看看,这种做法是如何实现的呢?
一。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;
}
public Husband(String name) {
this.name = name;
}
}
<?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"/>
<one-to-one name="wife" class="com.orm.model.Wife"/>
</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() {
}
public Wife(String name, Husband husband) {
this.name = name;
this.husband = husband;
}
}
<?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="husbandid" type="java.lang.Integer">
<generator class="foreign">
<param name="property">husband</param>
</generator>
</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 HibernateOneToOneTest 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 testOneToOne() throws Exception {
Husband husband = new Husband("husband");
coupleService.saveOrUpdate(husband);
Wife wife = new Wife("wife", husband);
coupleService.saveOrUpdate(wife);
}
}
测试结果截图
这里讲解的是一对一双向主键关联关系,如果你需要的是单向的,那么删除任何一方的one-to-one元素的同时删除代码中对于对方的引用即可,但请记住如果你想使两方中的某一方来维持一对一的关联关系,那么就需要像在Wife的配置文件中设置Wife的标识符一样进行合理的设置。最后附上源码以供参考。
- 大小: 5.6 KB
- 大小: 17.3 KB
分享到:
相关推荐
文件名"HibernateORM"可能代表了这个压缩包包含的资源是关于Hibernate ORM的,可能有示例代码、配置文件或其他相关教程材料,用于帮助读者理解和实践一对一外键关联。 **扩展知识点:** 1. **一对一外键关联配置**...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
2. **在主实体类中添加关联**:在User和Role类中,我们需要定义一对多的关系。在双向关联中,每个实体都需要知道对方的存在。 ```java @Entity public class User { @Id private Long id; // other fields @...
Hibernate支持一对一、一对多、多对一、多对多等多种关联映射。例如,使用`@OneToOne`、`@ManyToOne`、`@OneToMany`和`@ManyToMany`注解来定义这些关系,并可通过`CascadeType`设置级联操作。 八、延迟加载(Lazy ...
总之,理解并正确实现Hibernate中的一对一主键关联对于优化数据模型和提高代码的可维护性至关重要。通过共享主键,我们可以确保数据的完整性和一致性,同时简化对象之间的交互。阅读提供的博客资源,结合本文的讲解...
在深入探讨Hibernate中的一对一(One-to-One)主键双线关联机制之前,我们首先需要理解几个核心概念:Hibernate框架、实体关系映射以及主键关联的基本原理。Hibernate是Java平台下的一款开源对象关系映射(ORM)框架...
7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...
在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...
**标题详解:** "Hibernate教程06_关系映射之一对一单向主键关联" 在Hibernate框架中,关系映射是将数据库中的表关系映射到对象模型上的过程。本教程聚焦于一对一(One-to-One)单向主键关联,这是一种特定类型的...
在Java持久化框架Hibernate中,双向一对一(OneToOne)基于主键的关联映射是一种常见的对象关系映射(ORM)技术。这种映射方式允许两个实体类之间建立一对一的关联,且关联是通过主键来实现的。接下来,我们将深入...
本知识点主要讲解的是使用Hibernate实现一对一主键关联(Primary Key Join)的方式,通过注解进行配置。 一对一的关联在数据库设计中并不常见,但当两个实体之间确实存在一对一的关系时,如用户和其个人资料,这种...
在"hibernateORM1-n映射"这个主题中,我们将深入探讨Hibernate中的一对多(1:N)映射关系。 在关系数据库中,一对多关系是指一个表中的记录可以对应另一个表中的多个记录。在Hibernate中,这种关系可以通过配置XML...
在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享主键的一对一关联。这意味着这两个实体的表在数据库中通过主键进行连接,一个实体的主键同时也作为另一个实体的外键。 在Hibernate中,...
其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库表之间的映射关系处理。而JPA(Java Persistence API)是Java EE规范的一部分,为ORM提供了标准的接口。`hibernate-jpa-2.1-api-1.0.0....
在Java的持久化框架Hibernate中,一对多关系(OneToMany)是一种常见的对象关系映射(ORM)映射方式,它模拟了数据库中一个表的一条记录与另一表的多条记录之间的关联。本教程通过源代码的形式,讲解如何在Hibernate...
9. **一对多、多对一、多对多关系映射**: Hibernate可以轻松处理复杂的数据关系,如实体类之间的关联映射,通过@OneToMany、@ManyToOne、@ManyToMany等注解实现。 10. **事件监听和拦截器**: Hibernate支持事件监听...
6. @OneToMany、@ManyToOne、@OneToOne、@ManyToMany:表示不同类型的关联关系,如一对一、一对多、多对多。 7. @JoinColumn:用于指定关联字段在表中的具体列名。 8. @Temporal:处理日期和时间类型的字段,如...