`

一对一、一对多、多对多的配置

阅读更多

一对一

基于注解的方式:

 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配置多表关联(一对一、一对多、多对多

    ibatis配置多表关联(一对一、一对多、多对多

    ogg配置多对一复制-实际配置过程

    ogg配置多对一复制-实际配置过程 主要讲解linux下两个节点配置向同一个目标节点同步同一张表的过程

    nRF24L01无线模块实现一对一、一对多、多对一收发程序

    nRF24L01无线模块提供了灵活的通信模式,无论是简单的一对一,还是复杂的多对一或一对多,都可以通过合理的配置和编程实现。理解其工作原理和通信特性,对于开发无线通信项目至关重要。实际应用中,要充分考虑通信...

    一对一11或一对多通信配置说明.docx

    。。一对一11或一对多通信配置说明.docx

    ESP821166一对一或一对多通信配置说明 (2).docx

    ESP8266ESP821166一对一或一对多通信配置说明 (2).docx一或一对多通信配置说明 (2).docxESP8266一对一或一对多通信配置说明 (2).docx

    H3C华三 SecPath1800F防火墙NAT Server一对多地址映射的典型配置

    解决需求:对内网服务器提供不同的服务独立做NATServer映射。

    ESP一11对一或一对多通信配置说明.docx

    。。ESP一11对一或一对多通信配置说明.docx

    SSM框架下的一对多和多对一查询

    在SSM框架下实现一对多和多对一查询是常见的数据操作需求。 一对多关系指的是一个实体可以拥有多个关联的实体,比如一个学生可以有多个课程,多对一则是反过来,多个实体对应一个实体,例如多个学生可以对应一个班...

    maven 配置多仓库

    Maven默认使用中央仓库,但有时我们需要配置多个仓库,例如私有仓库,以提高依赖下载速度或管理内部私有构件。本文将详细介绍如何在Maven中配置多仓库。 ### Maven仓库类型 1. **中央仓库**:Maven官方维护的公共...

    SSH配置多个数据源

    这个过程包括定义和配置多个DataSource bean,调整Hibernate和Struts2的配置以适应不同的数据源,以及在业务逻辑中适当地切换和使用这些数据源。正确配置后,SSH框架能够灵活地处理多数据库环境,提高应用的可扩展性...

    Spring MVC 整合Mybatis详解,SSM框架的配置搭建,涉及Mybatis一对多的插入和查询,同时也涉及到一些简单的文件上传和下载.

    本项目实用Spring + Spring MVC + Mybatis。数据库实用Mysql数据库 项目主要涉及,SSM框架的配置搭建,涉及Mybatis一对多的插入和查询,同时也涉及到一些简单的文件上传和下载.

    实现一个配置简单功能强大的excel工具类搞定大多数导入导出

    实现一个配置简单功能强大的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-cli3多页面配置demo` 提供了一个示例,教你如何在 Vue CLI 3 的环境中设置多页面应用程序。 首先,我们需要了解 `vue.config.js` 文件。这个文件是 Vue CLI 自定义配置的入口,如果没有的话,可以手动创建。在...

    基于nRF24L01一对多的无线通信

    总结,基于nRF24L01的一对多无线通信系统利用STM32F103ZET6的SPI接口与无线模块交互,通过合理配置和编程,实现一个节点接收多个节点数据的无线网络。Keil5作为开发工具,提供了便利的开发环境。在实际应用中,需要...

    mybatis关联查询问题(一对多、多对一)

    在这个场景中,"mybatis关联查询问题(一对多、多对一)"是核心关注点,这涉及到数据库设计中的关系映射以及在Mybatis中如何处理这些关系。 1. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...

    nRF24L01+无线射频一对多通信源代码

    本文将围绕“nRF24L01+无线射频一对多通信”这一主题,深入探讨其工作原理、硬件配置以及源代码实现的关键点。 一、nRF24L01+概述 nRF24L01+是挪威Nordic Semiconductor公司推出的一款高性能、低功耗的2.4GHz无线...

    迈普系列交换机配置手册

    《迈普系列交换机配置手册》是一份详尽的指南,专为迈普品牌的交换机用户提供全面的配置指导。这份手册涵盖了多个关键领域,旨在帮助用户有效地管理和优化网络基础设施。以下将详细介绍其中涉及的主要配置内容: 1....

    华为 eNSP配置实例详解

    ### 华为eNSP配置实例详解...这些配置不仅可以帮助理解网络设备的基本配置方法,还能加深对网络协议的理解,对于学习网络技术和实际部署网络环境具有重要意义。在实际操作中,还需要根据具体的需求和场景调整配置细节。

    F5 GTM(全局负载均衡)配置指导书

    同时,可以配置多个 VLAN 和多个 SelfIP 。 Respect Fallback Dependency 配置 Respect Fallback Dependency 配置是 F5 GTM 中的一个重要配置。该选项的主要作用为当请求命中到 FallBack 算法的时候, FallBack ...

    Emacs配置文件

    与博客相结合,这个配置文件可能包含了作者在使用Emacs过程中积累的经验和心得,比如他们如何处理多语言开发、如何优化编辑效率,甚至如何在Emacs中集成其他工具和服务。 总的来说,Emacs配置文件是一个展现个人...

Global site tag (gtag.js) - Google Analytics