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一無所知。
如果本篇有幫助到您,幫忙點一下廣告支持,感恩。
參考:
沒有留言:
張貼留言