JPA單向一對多關係(unidirectional one to many)設定如下
例如一個作者(Author)有多個著作(Book)。
在資料庫中有兩張資料表Author
即Book
資料表。
下面分別是對映資料表的JPA Entity Author.java
及Book.java
Author.java
@Entity
@Table(name="Author")
public class Author {
@Id
@Column(name="AuthorId")
private Integer authorId;
@OneToMany
@JoinColumn(name="AuthorId") // 指到關聯資料表Book的外鍵欄位名稱
private Set bookSet;
// getters and setters ommitted
}
Book.java
@Entity
@Table(name="Book")
public class Book {
@Id
@Column(name="BookId")
private Integer bookId;
@Column(name="AuthorId") // 外鍵欄位
private Integer authorId;
// getters and setters ommitted
}
使用以上設定後,查詢出的Author
物件的bookSet
成員變數會包含有關聯的Book
物件。
@OneToMany
的屬性fetch
預設為FetchType.LAZY
。屬性cascade
預設為空,也就是不會有任何串聯操作,當對bookSet
進行新增修改或刪除時,BOOK
資料表不會受到相同的影響。
@JoinColumn
用來指明關聯資料表的關係欄位(外鍵欄位),也就是Author_id
。
如果沒有設定@JoinColumn
,則會去尋找自動產生的關聯中間表Author_Book
的關聯欄位bookSet_BookId
(不過我用Hibernate JPA配SQL Server實際上並不會自動產生這個關聯資料表)。總之在一般的情況下記得要設@JoinColumn
。
至於Book
類別因為沒設定對Author
的@ManyToOne
,所以其對Author
一無所知。
如果本篇有幫助到您,幫忙點一下廣告支持,感恩。
參考:
沒有留言:
張貼留言