Hibernate 教程(六)[一对一关系]

一对一关系

准备

一个人对应一个身份证

需要用到的注解

@OneToOne

OneToOne JavaAPI

CascadeType[]	cascade
(可选)必须级联到关联目标的操作。

FetchType	fetch
(可选)是否应该延迟加载关联,或者必须急切地获取关联。

java.lang.String	mappedBy
(可选)拥有关系的字段。

boolean	optional
(可选)关联是否可选。

boolean	orphanRemoval
(可选)是否将删除操作应用于已从关系中删除的实体,以及是否将删除操作级联到这些实体。

java.lang.Class	targetEntity
(可选)作为关联目标的实体类。

@JoinColumn

JoinColumn JavaAPI

java.lang.String	columnDefinition
(可选)为列生成DDL时使用的SQL片段。

ForeignKey	foreignKey
(可选)用于在表生成生效时指定或控制外键约束的生成。

boolean	insertable
(可选)该列是否包含在持久性提供程序生成的SQL INSERT语句中。

java.lang.String	name
(可选)外键列的名称。

boolean	nullable
(可选)外键列是否可为空。

java.lang.String	referencedColumnName
(可选)此外键列引用的列的名称。

java.lang.String	table
(可选)包含列的表的名称。

boolean	unique
(可选)属性是否是唯一键。

boolean	updatable
(可选)该列是否包含在持久性提供程序生成的SQL UPDATE语句中。

此处只做简单描述,详细查看JavaAPI,以及官网用户手册

/*
 Navicat Premium Data Transfer

 Source Server         : 192.168.1.200
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : 192.168.1.200:3306
 Source Schema         : Hibernate

 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001

 Date: 29/12/2018 13:18:21
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for IDCard
-- ----------------------------
DROP TABLE IF EXISTS `IDCard`;
CREATE TABLE `IDCard`  (
  `cardID` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `cardNum` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`cardID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of IDCard
-- ----------------------------
INSERT INTO `IDCard` VALUES (1, '110101199003077176');
INSERT INTO `IDCard` VALUES (2, '110101199003075015');
INSERT INTO `IDCard` VALUES (3, '110101199003077635');
INSERT INTO `IDCard` VALUES (4, '110101199003071997');
INSERT INTO `IDCard` VALUES (5, '11010119900307993X');

-- ----------------------------
-- Table structure for person
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person`  (
  `personID` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `personName` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '人名',
  `personBore` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '出生地',
  `idCardNum` int(11) NULL DEFAULT NULL COMMENT '关联身份证号',
  PRIMARY KEY (`personID`) USING BTREE,
  INDEX `id_fk`(`idCardNum`) USING BTREE,
  CONSTRAINT `id_fk` FOREIGN KEY (`idCardNum`) REFERENCES `IDCard` (`cardid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES (1, '沈熙华', '内蒙古自治区 乌兰察布市 丰镇市', 1);
INSERT INTO `person` VALUES (2, '朱振华', '辽宁省 辽阳市 文圣区 ', 2);
INSERT INTO `person` VALUES (3, '元晋鹏', '四川省 成都市 龙泉驿区', 3);
INSERT INTO `person` VALUES (4, '李磊', '天津市 塘沽区', 4);
INSERT INTO `person` VALUES (5, '皮舒云', '河南省 商丘市 夏邑县', 5);

单向一对一

package entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 个人
 * @author LiHan
 *
 */
@Table(name="person")
@Entity
public class Person {
	
	/**
	 * 唯一标识
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int personID;
	
	/**
	 * 人名
	 */
	private String personName;
	
	/**
	 * 出生地
	 */
	private String personBore;
	
	@OneToOne(cascade=CascadeType.ALL, orphanRemoval=true)
	@JoinColumn(name="idCardNum")
	private IDCard idCard;
	

	public int getPersonID() {
		return personID;
	}

	public void setPersonID(int personID) {
		this.personID = personID;
	}

	public String getPersonName() {
		return personName;
	}

	public void setPersonName(String personName) {
		this.personName = personName;
	}

	public String getPersonBore() {
		return personBore;
	}

	public void setPersonBore(String personBore) {
		this.personBore = personBore;
	}

	public IDCard getIdCard() {
		return idCard;
	}

	public void setIdCard(IDCard idCard) {
		this.idCard = idCard;
	}

}
package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 身份证
 * @author LiHan
 *
 */
@Table(name="IDCard")
@Entity
public class IDCard {
	
	/**
	 * 唯一标识
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int cardID;
	
	/**
	 * 身份证号
	 */
	private String cardNum;

	public int getCardID() {
		return cardID;
	}

	public void setCardID(int cardID) {
		this.cardID = cardID;
	}

	public String getCardNum() {
		return cardNum;
	}

	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}
	
}

双向一对一

package entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 个人
 * @author LiHan
 *
 */
@Table(name="person")
@Entity
public class Person {
	
	/**
	 * 唯一标识
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int personID;
	
	/**
	 * 人名
	 */
	private String personName;
	
	/**
	 * 出生地
	 */
	private String personBore;
	
	@OneToOne(cascade=CascadeType.ALL, orphanRemoval=true)
	@JoinColumn(name="idCardNum")
	private IDCard idCard;
	

	public int getPersonID() {
		return personID;
	}

	public void setPersonID(int personID) {
		this.personID = personID;
	}

	public String getPersonName() {
		return personName;
	}

	public void setPersonName(String personName) {
		this.personName = personName;
	}

	public String getPersonBore() {
		return personBore;
	}

	public void setPersonBore(String personBore) {
		this.personBore = personBore;
	}

	public IDCard getIdCard() {
		return idCard;
	}

	public void setIdCard(IDCard idCard) {
		this.idCard = idCard;
	}

}
package entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 身份证
 * @author LiHan
 *
 */
@Table(name="IDCard")
@Entity
public class IDCard {
	
	/**
	 * 唯一标识
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int cardID;
	
	/**
	 * 身份证号
	 */
	private String cardNum;
	
	/**
	 * 个人
	 */
	@OneToOne(mappedBy="idCard" ,cascade=CascadeType.ALL)
	private Person person;

	public int getCardID() {
		return cardID;
	}

	public void setCardID(int cardID) {
		this.cardID = cardID;
	}

	public String getCardNum() {
		return cardNum;
	}

	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}
		
}

项目源码

https://download.csdn.net/download/god_father_kao/10885342

猜你喜欢

转载自blog.csdn.net/God_Father_kao/article/details/85337601