2012-03-10 9 views
3

こんにちは、JPAを使って@ManyToMany関係マッピングについて学んでいます。 私は多かれ少なかくそれが動作するかを理解するが、私は疑いがある。JPAはマッピングについて疑問に思う@ManyToMany

@Entity 
public class EntityE implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long eId; 
    @ManyToMany 
    @JoinTable(joinColumns = 
    @JoinColumn(name = "eId"), inverseJoinColumns = 
    @JoinColumn(name = "fId")) 
    private Collection<EntityF> entityFs; 
    //... 
} 

はまた、この他のエンティティを参照してください:

@Entity 
public class EntityF implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long fId;  
    private Collection<EntityE> entityEs; 
    //... 
} 

これは私がデータベースに得るものです:

enter image description here

私はあなたに私はいくつかのマッピングを行うには、最初にこのコードをお見せしましょう

私の疑問は:

- @ManyToMany関係を作成したいEntityEが関係の所有者であるnshipは、このアプローチは正しいですか?

- リレーションシップを一方向にしたいので、EntityB_EntityFという1つのメディエータ・テーブルを作成することになっています。しかし何らかの理由でEntityF_EntityEという2番目のテーブルも作成します。なぜそれが分からないのですか?それは普通ですか?どうすればいいですか?

答えて

2

私はちょっとした実験をして答えを得ました。私はそれが正しいと思っています。 名前を指定しなかった場合、何らかの奇妙な理由で双方向の関係が作成されるため、私がしたことは関係の名前を追加することでした。

は、このコードは、固定、それを参照してください:ここで

@Entity 
public class EntityE implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long eId; 
    @ManyToMany 
    @JoinTable(name="entitye_entityf",joinColumns = 
    @JoinColumn(name = "eId"), inverseJoinColumns = 
    @JoinColumn(name = "fId")) 
    private Collection<EntityF> entityFs; 

は、他のエンティティです。

@Entity 
public class EntityF implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long fId; 
    @ManyToMany 
    @JoinTable(name="entitye_entityf",joinColumns = 
    @JoinColumn(name = "fId"), inverseJoinColumns = 
    @JoinColumn(name = "eId")) 
    private Collection<EntityE> entityEs; 

画像からわかるように、私の疑問を解決することができました。私は、この答えが他の誰かにも役立つことを願っています。

enter image description here

関連する問題