網頁

2018/6/20

Hibernate JPA 單向一對多Unidirectional One To Many設定

JPA單向一對多關係(unidirectional one to many)設定如下

例如一個作者(Author)有多個著作(Book)。


在資料庫中有兩張資料表AuthorBook資料表。

下面分別是對映資料表的JPA Entity Author.javaBook.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一無所知。

如果本篇有幫助到您,幫忙點一下廣告支持,感恩。


參考:

沒有留言:

張貼留言