2012-03-10 4 views
3

Привет, я узнаю о сопоставлении отношений @ManyToMany с использованием JPA. Я более или менее понимаю, как это работает, но у меня есть сомнения. Позвольте мне показать вам первый этот код, где я сделать некоторое отображение: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 relatio nship, где EntityE является владельцем отношений, является ли этот подход правильным?

-I хочу, чтобы отношения были однонаправленными, поэтому предполагается создать только одну таблицу посредников 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