2012-03-10 107 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是關係所有者的情況下,這種方法是否正確?

- 我想要關係是單向的,所以它應該創建一個名爲EntityB_EntityF的中介表。但由於某種原因,它還創建了另一個名爲EntityF_EntityE的表。我不明白這是爲什麼?這是正常的嗎?如果不是,我應該如何解決它?

回答

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