hibernate中一对一的关联有两种方式:一种是采用外键关联,另外一种是采用主键关联。
一个丈夫(husband)对应一个妻子(wife),主要目标是在存储丈夫或者妻子时,关联的对象也被存储。具体代码如下:
husband类:
package cn.edu.dlnu.resources.model.entity;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue //主键生成器
public int getId() {
return id;
}
public String getName() {
return name;
}
@OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn//这个注解只能写在主(生成ID)的一端
public Wife getWife() {
return wife;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
wife类:
package cn.edu.dlnu.resources.model.entity;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity
public class Wife {
private int id;
private String name;
private Husband husband;
@Id
@GenericGenerator(name ="pkGenerator",strategy="foreign" ,parameters={@Parameter(name="property",value="husband")})
@GeneratedValue(generator="pkGenerator")
//wife的ID是根据husband的ID来赋值的,这里需要设置ID生成器的策略为foreign,参数中指定wife的ID是使用husband对象中的ID
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setHusband(Husband husband) {
this.husband = husband;
}
@OneToOne(cascade=CascadeType.ALL, mappedBy="wife")
public Husband getHusband() {
return husband;
}
}
OneToOnePKTest类:
package cn.edu.dlnu.resources.model.entity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import cn.edu.dlnu.resources.model.entity.Husband;
import cn.edu.dlnu.resources.model.entity.Wife;
public class OneToOnePKTest {
private static SessionFactory sessionFactory;
@BeforeClass
public static void beforeClass() {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void afterClass() {
sessionFactory.close();
}
@Test
public void testSave(){
Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
Husband h = new Husband();
Wife w = new Wife();
w.setName("w");
h.setName("h");
h.setWife(w);
w.setHusband(h);
s.save(w);
s.getTransaction().commit();
}
@Test
public void testSchemaExport() {
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
}
public static void main(String[] args) {
beforeClass();
new OneToOnePKTest().testSave();
afterClass();
}
}
hibernate生成的数据库表:create table Husband (
id integer not null auto_increment,
name varchar(255),
primary key (id)
);
create table Wife (
id integer not null,
name varchar(255),
primary key (id)
)
运行testSave(),方法后数据库中husband 与 wife表中记录的主键一致。
相关推荐
ibatis配置多表关联(一对一、一对多、多对多
ogg配置多对一复制-实际配置过程 主要讲解linux下两个节点配置向同一个目标节点同步同一张表的过程
nRF24L01无线模块提供了灵活的通信模式,无论是简单的一对一,还是复杂的多对一或一对多,都可以通过合理的配置和编程实现。理解其工作原理和通信特性,对于开发无线通信项目至关重要。实际应用中,要充分考虑通信...
。。一对一11或一对多通信配置说明.docx
ESP8266ESP821166一对一或一对多通信配置说明 (2).docx一或一对多通信配置说明 (2).docxESP8266一对一或一对多通信配置说明 (2).docx
解决需求:对内网服务器提供不同的服务独立做NATServer映射。
。。ESP一11对一或一对多通信配置说明.docx
在SSM框架下实现一对多和多对一查询是常见的数据操作需求。 一对多关系指的是一个实体可以拥有多个关联的实体,比如一个学生可以有多个课程,多对一则是反过来,多个实体对应一个实体,例如多个学生可以对应一个班...
Maven默认使用中央仓库,但有时我们需要配置多个仓库,例如私有仓库,以提高依赖下载速度或管理内部私有构件。本文将详细介绍如何在Maven中配置多仓库。 ### Maven仓库类型 1. **中央仓库**:Maven官方维护的公共...
这个过程包括定义和配置多个DataSource bean,调整Hibernate和Struts2的配置以适应不同的数据源,以及在业务逻辑中适当地切换和使用这些数据源。正确配置后,SSH框架能够灵活地处理多数据库环境,提高应用的可扩展性...
本项目实用Spring + Spring MVC + Mybatis。数据库实用Mysql数据库 项目主要涉及,SSM框架的配置搭建,涉及Mybatis一对多的插入和查询,同时也涉及到一些简单的文件上传和下载.
实现一个配置简单功能强大的excel工具类搞定大多数导入导出. http://blog.csdn.net/lk_blog/article/details/8007777 http://blog.csdn.net/lk_blog/article/details/8007837 对于J2EE项目导入导出Excel是最普通和...
`vue-cli3多页面配置demo` 提供了一个示例,教你如何在 Vue CLI 3 的环境中设置多页面应用程序。 首先,我们需要了解 `vue.config.js` 文件。这个文件是 Vue CLI 自定义配置的入口,如果没有的话,可以手动创建。在...
总结,基于nRF24L01的一对多无线通信系统利用STM32F103ZET6的SPI接口与无线模块交互,通过合理配置和编程,实现一个节点接收多个节点数据的无线网络。Keil5作为开发工具,提供了便利的开发环境。在实际应用中,需要...
在这个场景中,"mybatis关联查询问题(一对多、多对一)"是核心关注点,这涉及到数据库设计中的关系映射以及在Mybatis中如何处理这些关系。 1. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...
本文将围绕“nRF24L01+无线射频一对多通信”这一主题,深入探讨其工作原理、硬件配置以及源代码实现的关键点。 一、nRF24L01+概述 nRF24L01+是挪威Nordic Semiconductor公司推出的一款高性能、低功耗的2.4GHz无线...
《迈普系列交换机配置手册》是一份详尽的指南,专为迈普品牌的交换机用户提供全面的配置指导。这份手册涵盖了多个关键领域,旨在帮助用户有效地管理和优化网络基础设施。以下将详细介绍其中涉及的主要配置内容: 1....
### 华为eNSP配置实例详解...这些配置不仅可以帮助理解网络设备的基本配置方法,还能加深对网络协议的理解,对于学习网络技术和实际部署网络环境具有重要意义。在实际操作中,还需要根据具体的需求和场景调整配置细节。
同时,可以配置多个 VLAN 和多个 SelfIP 。 Respect Fallback Dependency 配置 Respect Fallback Dependency 配置是 F5 GTM 中的一个重要配置。该选项的主要作用为当请求命中到 FallBack 算法的时候, FallBack ...
与博客相结合,这个配置文件可能包含了作者在使用Emacs过程中积累的经验和心得,比如他们如何处理多语言开发、如何优化编辑效率,甚至如何在Emacs中集成其他工具和服务。 总的来说,Emacs配置文件是一个展现个人...