2017-09-03 16 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;} 

:私はこれらの2つのエンティティがあるとします。

私の質問は:はそれだけ@OneToMany所望の関係を(購入は多くの記事が含まれている)持っている記事のクラスを指す購入クラスでで可能です。 @OneToMany注釈を使用するには、記事クラスに@ManyToOneを追加する必要があります。その場合は、なぜ@ManyToOneを追加する必要がありますか?どんな説明もお願いします。 ありがとうございます。すべての

+0

はいてください:

が目的の結果を持っているために、私は以下のコードを使用していました。記事が意味をなさない場合、商品は購入を維持する必要はありません。あなたはそれを試しましたか?それはうまく動作するはずです –

+0

@ JackFlamp thats私はそれを試したことがありますし、変更はテーブル内で起こっている:/何も追加されませんでした – ziMtyth

+0

あなたは永続して何も起こらなかった?あなたは購入を保存することができましたが、記事は保存されませんでしたか? –

答えて

1

まず、私は誤解を招くタイトルを書く必要があり、私はそれがより正確にするために変更されます。

旧タイトル:をJPAでは、@ManyToOneを使用せずに@OneToManyを使用することが可能でしょうか?

新しいタイトル: @OneToManyは結合テーブルを作成しません。

私が言ったように、私はJPAの初心者です、私の問題はダムに見えるかもしれませんが、私は質問を削除することができますが、誰かがいつか同様の状況に直面する場合に備えておくことにしました。

非常に普通のコードを実行するたびに購買と記事の結合テーブルが作成されましたが、気付かなかったのですが、NetBeans のログをチェックしていましたが、これらのログでは、ジョインテーブルがログに表示されないと思います(誰かがこの情報を確認してこの回答を編集できることを願っています)。

私は、Purchase and Articleを新しいスキーマsch_salesに作成しました。結合テーブルは公開スキーマ(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:

Iは第3のテーブルを持っていたが、明らかに正しくない購入条(ジョインテーブル)のIDを含む作成。

通常の「振る舞い」は、に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; 

} 
関連する問題