1. 程式人生 > >Hibernate 教程(六)[一對一關係]

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