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
MyBatis映射一对多和多对多关系配置(看完这篇不吃亏)
下面我们将深入探讨一对多虚拟串口的工作原理、应用领域以及实现方法。 1. **工作原理** 一对多虚拟串口通过软件模拟多个串口,这些虚拟串口与物理串口之间建立连接。当物理串口接收到数据时,软件会将这些数据...
在SSM框架下实现一对多和多对一查询是常见的数据操作需求。 一对多关系指的是一个实体可以拥有多个关联的实体,比如一个学生可以有多个课程,多对一则是反过来,多个实体对应一个实体,例如多个学生可以对应一个班...
Maven默认使用中央仓库,但有时我们需要配置多个仓库,例如私有仓库,以提高依赖下载速度或管理内部私有构件。本文将详细介绍如何在Maven中配置多仓库。 ### Maven仓库类型 1. **中央仓库**:Maven官方维护的公共...
在Spring Boot应用中,多模块配置文件的读取是一个重要的实践,它有助于提高代码的可维护性和模块化。本文将详细探讨如何在Spring Boot的多模块项目中管理和使用不同的配置文件,以实现低耦合的设计。 首先,了解...
这个过程包括定义和配置多个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. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...
- 配置LACP:链路聚合控制协议(LACP)允许多个物理链路形成一个逻辑链路,提高网络的可靠性和带宽。 三层路由配置: - 配置三层路由接口:将交换机接口配置为路由模式,以支持网络层的路由功能。 - 配置静态路由和...
本文将围绕“nRF24L01+无线射频一对多通信”这一主题,深入探讨其工作原理、硬件配置以及源代码实现的关键点。 一、nRF24L01+概述 nRF24L01+是挪威Nordic Semiconductor公司推出的一款高性能、低功耗的2.4GHz无线...