2014-10-11 54 views
0

假設我有這樣的POJO,我想插入文章到MySQL數據庫。休眠MySQL

@Entity 
@Table(name = "article") 
public class Article{ 
    private String author; 
    private String body; 
    private int commentCount; 
    private List<EntryComment> comments; 


@Entity 
@Table(name = "comments") 
public class Comment{ 
    private String author; 
    private String body; 
    private int voteCount; 

我想從另一個表中刪除字段comments從「文章」。是否可以使用hibernate註釋將註釋放在單獨的表中?

回答

2

當然是了。我建議你使用你已經@column爲字符串的所有元素註解和詮釋然而元素的意見只是看看代碼那裏:

文章類別:

@Entity 
@Table(name = "article") 
public class Article{ 
    private String author; 
    private String body; 
    private int commentCount; 

    @OneToMany(mappedBy = "article") 
    @LazyCollection(LazyCollectionOption.TRUE) 
    private List<EntryComment> comments; 

評論類:

@Entity 
@Table(name = "comments") 
public class Comment{ 

    @ManyToOne(fetch = FetchType.LAZY) 
    private Article article; 

    private String author; 
    private String body; 
    private int voteCount; 
+0

您不應該在Comment類中熱切地獲取文章 - 當您將迭代Article類的評論時,最終會不必要地向文章表中添加後向連接。 – 2014-10-11 18:05:52

+0

我相信這很大程度上取決於應用程序,對於我來說,在處理子對象時,我總是需要父對象,所以這樣做有時候會有意義。在這篇文章中,我只展示了兩種選擇(從父母到孩子,這是懶惰的,從小孩到父母都很渴望)。一個人可能已經放棄了這一切,但我認爲重要的是要表明實際上可以指定獲取行爲。 – 2014-10-11 20:05:22

+0

你是對的,評論將需要對其父母的參考。但它應該是懶惰的 - 在大多數情況下,您將不會顯示與文章相關的任何內容,而您將顯示評論。該文章已經顯示,您將感興趣的是僅顯示與評論​​相關的詳細信息。懶惰的時候,你會在什麼時候查詢這篇文章。當它渴望的時候,你會有「SELECT * FROM comment JOIN文章...」,並且與文章表的連接是不必要的。 – 2014-10-11 20:13:14