Hibernate中的數據關聯主要分爲三大類:
1對1: 一個人對應一個身份證
1對多,多對1: 一個人有很多聯繫地址 ,多個用戶擁有一個權限
多對多: 一個學生可以對應選很多門課,一門課可以對應有許多學生
一.1對1關係 --主鍵關聯
一個人對應一個身份證
表結構:
-- 創建表
CREATE TABLE person
(
id VARCHAR(32) NOT NULL PRIMARY KEY ,
name VARCHAR(20) NOT NULL ,
age int
) ;
CREATE TABLE idcard
(
id VARCHAR(32) ,
serial VARCHAR(18) NOT NULL ,
expiry int ,
FOREIGN KEY(id) REFERENCES person(id) ON DELETE CASCADE
) ;
Person.java
IDCard.java
Person.hbm.xml 關聯主表
Idcard.hbm.xml 關聯從表
插入代碼示例:
二. 1對多,多對1關係 --外鍵關聯
1.1對多關係
一個人有很多聯繫地址
表結構
CREATE TABLE person
(
pid VARCHAR(32) NOT NULL PRIMARY KEY ,
name VARCHAR(20) NOT NULL ,
age INT
) ;
CREATE TABLE address
(
aid VARCHAR(32) NOT NULL PRIMARY KEY ,
name VARCHAR(50) NOT NULL ,
zipcode VARCHAR(10) NOT NULL ,
pid VARCHAR(32) ,
FOREIGN KEY (aid) REFERENCES person(pid) ON DELETE CASCADE
) ;
Person.java
Address.java
Person.hbm.xml 關聯主表
Address.hbm.xml 關聯從表
2.多對一關係
多個用戶擁有一個權限
表結構
-- 創建表
CREATE TABLE person
(
id VARCHAR(32) PRIMARY KEY NOT NULL ,
name VARCHAR(20) NOT NULL ,
age INT ,
gid VARCHAR(32)
) ;
CREATE TABLE TGROUP
(
gid VARCHAR(32) PRIMARY KEY NOT NULL,
name VARCHAR(20)
) ;
Person.java
TGroup.java
Person.hbm.xml 關聯主表
TGroup.hbm.xml 關聯從表
一對多是將映射關係寫在一的一端,多對一是將映射關係寫在多的一端。一對多和多對一的映射策略是一致的,都是通過在"多"的一端添加一個外鍵指向"一"的一端,只是站的角度不同。
不管多對一還是一對多,都是在"多"的一端添加一個外鍵指向"一"的一端,只不過是多對一是在多的一端爲其自己添外鍵,而一對多則是在一的一端爲多的一端添加外主鍵。
3.多對多關係
一個學生可以對應選很多門課,一門課可以對應有許多學生
表結構
CREATE TABLE person
(
pid VARCHAR(32) NOT NULL PRIMARY KEY ,
name VARCHAR(20) NOT NULL ,
age INT
) ;
CREATE TABLE server
(
sid VARCHAR(32) NOT NULL PRIMARY KEY ,
name VARCHAR(20) NOT NULL
) ;
CREATE TABLE person_server
(
pid VARCHAR(32) ,
sid VARCHAR(32) ,
FOREIGN KEY (pid) REFERENCES person(pid) ON DELETE CASCADE ,
FOREIGN KEY (sid) REFERENCES server(sid) ON DELETE CASCADE
) ;
Person.java
Server.java
Person.hbm.xml
Server.hbm.xml