7.1.1 單向一對一 Book-Author
1) 使用@JoinColumn注釋
在Book的author屬性的getAuthor方法上
@OneToOne(casecade=CasecadeType.ALL)
@JoinColumn(name="author_oid")//name屬性定義Book表格的外鍵列名
@JoingColumn是Hibernate默認採用的映射策略 如果不顯式使用的話
Hibernate將使用額外外鍵列(默認的外鍵列名為AUTHOR_OID 即目標類名+'_'+目標類主鍵列名)
2)使用@PrimaryKeyJoinColumn注釋
用相等的主鍵來建立關聯,不需要額外的外鍵列
在Book的author屬性的getAuthor方法上
@OneToOne(casecade=CasecadeType.ALL)
@PrimaryKeyJoinColumn
3)使用級聯
CasecadeType.ALL 主類對象的任何持久化操作都會同樣作用在目標類上
CasecadeType.PERSIST 主類對象被持久化時 子類對象也同樣
CasecadeType.MERGE 更新已經持久化的主類對象時子類也同樣
CasecadeType.REMOVE 刪除...........
CasecadeType.REFRESH 刷新....
7.1.2 雙向一對一
兩個表格是完全對等的,每個類都可以作為級聯的主動方
這時候就需要使用@OneToOne注釋的mappedBy屬性,
明確告訴Hibernate在映射的時候哪個表格應該作為主動方擁有關聯列
Book-Author Book為主動類
在Author的Book屬性的getBook方法上
@OneToOne(mappedBy="author")
mappedBy屬性設置在 目標類中指向主動類的屬性上 author用book屬性指向Book
它的值等於主動類中指向目標類的屬性名 author是主動類book指向目標類的屬性名
如果衹有@OneToOne沒有 mappedBy屬性 Hibernate會在兩個表中都加一個關聯外鍵(指向對方主鍵的外鍵)
7.1.3 單向多對一
Book(*)-(1)Author
Author無法直接獲取與他關聯的Book對象
多個Book對象可以同時指向一個Author
在Book的author屬性的getAuthor方法上
@ManyToOne(cascade=CascadeType.ALL)
#JoinColumn(name="author_oid")
7.1.4 單向一對多
Book(1)-(*)Author
在book的List<Author>屬性的getAuthors方法上
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="book_oid")//注意是book_id而不是author_id
@OneToManyde fetch默認是LAZY
當getAuthors返回的不是泛型 (List 而不是 List<Author>)
需要再加一個屬性
@OneToMany(targetEntity=Author.class,cascade=CascadeType.ALL)