2017-09-03 129 views
0

我是JPA的新手。假設我有兩個實體:@OneToMany不創建連接表

//Imports 

@Entity 
@Table(name="article", schema = "sch_client") 
public class Article implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 
    private String name; 
    private int price; 
    private int amount; 

    //Getters & setters 
} 

而且

@Entity 
@Table(name="purchase", schema = "sch_client") 
public class Purchase implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 

    @OneToMany 
    private List<Article> listArticle;} 

我想有像購買包含了許多文章。

我的問題是:購買類中只有@OneToMany是否可能指向文章類具有所需關係(購買包含許多文章)。或者使用@OneToMany註釋,我必須在Article類上添加@ManyToOne。如果是這樣,爲什麼必須添加@ManyToOne?請任何解釋。 在此先感謝。

+0

是肯定的。如果文章沒有意義,文章不需要保留購買。你試過了嗎?它應該正常工作 –

+0

@JackFlamp多數民衆贊成在我試過它的問題,並沒有發生變化發生在表中:/沒有增加 – ziMtyth

+0

所以你堅持和沒有發生?您是否可以保存購買,但文章沒有保存,是什麼意思? –

回答

1

首先,我必須寫一個標題誤導,我會改變它,使之更準確:

舊標題:在JPA中,是有可能使用@OneToMany不使用@ManyToOne?

新標題: @OneToMany不創建連接表。

正如我所說,我是JPA的新手,我的問題可能會出現蠢,我可以刪除問題,但我決定保留它以防某人某天將面臨類似的情況,它可以幫助!

Purchase和Article的連接表是在我每次正常執行代碼時創建的,但是我沒有注意到!,我正在檢查NetBeans的日誌並且沒有看到連接表,我被誤導了通過這些日誌,我認爲連接表不會出現在日誌中(我希望有人可以確認這些信息並編輯此答案)。

我在一個名爲sch_sales的新模式中創建了Purchase和Article。並且連接表是在公共模式(PostgreSQL)中創建的。

因此,爲了使它更加正確,我將模式添加到@JoinTable中,如下所示,就像這樣,我將把所有表放在同一個模式中。

@Entity 
@Table(name="purchase", schema = "sch_sales") 
public class Purchase implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 

    @OneToMany 
    @JoinTable(name="join_purchase_article", schema = "sch_sales", joinColumns = @JoinColumn(name="sales_fk"), inverseJoinColumns = @JoinColumn(name="article_fk")) 
    private List<Article> listArticle; 

} 

UPDATE:

我有一個第三表中創建包含購買和文章的ID(連接表),這顯然是不正確的。

正常的「行爲」是在Article中添加id_purchase列,在page我已經找到了如何得到這樣的結果。

要具有所期望的結果,我用下面的代碼:

@Entity 
@Table(name="purchase", schema = "sch_sales") 
public class Purchase implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 

    @OneToMany 
    @JoinColumn(name="id_purchase") 
    private List<Article> listArticle; 

}