Hibernate 教程(六)[一對一關係]
阿新 • • 發佈:2018-12-29
一對一關係
文章目錄
準備
一個人對應一個身份證
需要用到的註解
@OneToOne
CascadeType[] cascade
(可選)必須級聯到關聯目標的操作。
FetchType fetch
(可選)是否應該延遲載入關聯,或者必須急切地獲取關聯。
java.lang.String mappedBy
(可選)擁有關係的欄位。
boolean optional
(可選)關聯是否可選。
boolean orphanRemoval
(可選)是否將刪除操作應用於已從關係中刪除的實體,以及是否將刪除操作級聯到這些實體。
java.lang.Class targetEntity
(可選)作為關聯目標的實體類。
@JoinColumn
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;
}
}