对于一对一关联关系的建立,除了前面讲的方式,即将关联关系由某一方维持外,还可以采用另外一种基于第三张表的关联关系方式,即除去两方各自映射的数据表外,再在数据库中建立第三张表用以维持两者的一对一关联关系。下面来看看这是如何实现的吧。
一。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"/>
<join table="couple">
<key column="husbandid"/>
<many-to-one name="wife" column="wifeid" class="com.orm.model.Wife" cascade="all"/>
</join>
</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="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 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 {
Wife wife = new Wife("wife");
Husband husband = new Husband("husband", wife);
coupleService.saveOrUpdate(husband);
}
}
测试结果截图
这里讲解的是一对一双向的连接表关联关系的建立,如果想要实现单向的关联关系,那么在删除代码中对对方引用的同时需要删除配置文件中的one-to-one元素。最后附上源码以供参考。
- 大小: 8.3 KB
- 大小: 15.6 KB
- 大小: 9.4 KB
分享到:
相关推荐
“Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
Hibernate支持多种关联映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。这些关联可以通过定义外键或使用中间表来实现,使得对象间的复杂关系得以轻松处理。 ...
2. **在主实体类中添加关联**:在User和Role类中,我们需要定义一对多的关系。在双向关联中,每个实体都需要知道对方的存在。 ```java @Entity public class User { @Id private Long id; // other fields @...
Hibernate支持一对一、一对多、多对一、多对多等多种关联映射。例如,使用`@OneToOne`、`@ManyToOne`、`@OneToMany`和`@ManyToMany`注解来定义这些关系,并可通过`CascadeType`设置级联操作。 八、延迟加载(Lazy ...
Hibernate支持一对一、一对多、多对一和多对多的关联映射,通过注解或XML配置定义关联规则。关联映射使得对象之间的关系在数据库中得以体现,简化了数据操作。 九、延迟加载与立即加载 Hibernate的懒加载机制允许...
Hibernate支持多种关联映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。这些映射方式通过注解或XML文件定义,简化了关系数据库与对象模型的对应关系。 8. **延迟...
7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...
Hibernate ORM,作为Java领域最著名的对象关系映射框架之一,自诞生以来就深受开发者喜爱。2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多改进和新特性,为开发者提供了更为高效、稳定的持久...
7. **懒加载和级联操作**: Hibernate支持对象关系的懒加载,通过`lazy="true"`可以延迟加载关联数据。级联操作允许在一次主对象的操作中处理相关联的对象,如`CascadeType.ALL`表示对关联对象的所有操作都进行级联。...
其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库表之间的映射关系处理。而JPA(Java Persistence API)是Java EE规范的一部分,为ORM提供了标准的接口。`hibernate-jpa-2.1-api-1.0.0....
首先,我们需要理解Hibernate中的两种主要关联类型:一对一(One-to-One)和一对多(One-to-Many)。而多对多关系是通过在两个参与实体之间创建一个额外的中间表来实现的,这个中间表通常包含两个外键,分别指向原表...
- **一对一连接表关联**:通过一个额外的连接表来实现两个实体之间的一对一关系。 2. **一对多关联**: - **一对多外键关联**:一个实体包含指向多个其他实体的外键。 - **一对多连接表关联**:通过一个连接表来...
在IT行业中,数据库管理和持久化框架是至关重要的技术领域,特别是在Java开发中,Hibernate作为一款优秀的对象关系映射(ORM)框架,极大地简化了数据库操作。在这个“Hibernate学生-课程-成绩表的例子(many2many)”...
标题 "Hibernate基于连接表的一对多单向关联" 涉及的是数据库对象关系映射(ORM)框架Hibernate中的一个重要概念。在Java开发中,Hibernate是广泛使用的工具,它允许开发者将Java类与数据库表进行映射,简化了数据...
9. **一对多、多对一、多对多关系映射**: Hibernate可以轻松处理复杂的数据关系,如实体类之间的关联映射,通过@OneToMany、@ManyToOne、@ManyToMany等注解实现。 10. **事件监听和拦截器**: Hibernate支持事件监听...
6. @OneToMany、@ManyToOne、@OneToOne、@ManyToMany:表示不同类型的关联关系,如一对一、一对多、多对多。 7. @JoinColumn:用于指定关联字段在表中的具体列名。 8. @Temporal:处理日期和时间类型的字段,如...