Проблема сопоставления и сохранения многих ко многим с использованием Spring Data JPA

У меня есть схема базы данных, в которой мне нужно сопоставить отношения «многие ко многим».

***** Tables **********

person
--------
id - int 
name - varchar

color
-------------
id - int 
color - varchar

person_color
------------
person_id - int (matches an id from person)
color_id - int (matches an id from color)

Я преобразовал приведенный выше сценарий в JPA @Entities как

@Entity
public class Person {


    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    @ManyToMany(cascade = {CascadeType.ALL})
    private List<Color> colors;
   /// setters getters are there
}

а также

@Entity
public class Color {


    @Id
    @GeneratedValue
    private Integer id;

    private String color;

    @ManyToMany(cascade = {CascadeType.ALL})
    private List<Person> person;
   /// setters getters are there
}

приведенный выше код создает четыре таблицы

person
person_color
color
color_person

но я хочу только три стола, как

 person
    person_color
    color

что не так с приведенным выше кодом и хотите привести пример сохранения данных в базу данных любого ресурса или ссылку на хороший пример сохранения данных с использованием отношения JPA многие ко многим.


person Community    schedule 13.09.2015    source источник
comment
проверьте эту ссылку, она может быть вам полезна: objectdb.com/api/java/jpa/ManyToMany   -  person soorapadman    schedule 14.09.2015


Ответы (1)


Обновите свой класс Person до следующего

@Entity
public class Person {


    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    @ManyToMany(targetEntity = Color.class, cascade = {CascadeType.ALL})
    @JoinTable(name = "person_color", joinColumns = { @JoinColumn(name = "person_id") }, 
                       inverseJoinColumns = { @JoinColumn(name = "color_id") })
    private List<Color> colors;
   /// setters getters are there
}

Обновите свой класс Color до следующего

@Entity
public class Color {


    @Id
    @GeneratedValue
    private Integer id;

    private String color;

    @ManyToMany(mappedBy = "colors", cascade = CascadeType.ALL)
    private List<Person> persons;
   /// setters getters are there
}
person Balwinder Singh    schedule 14.09.2015
comment
cascade = {CascadeType.ALL вызывает некоторое Detached Entity Exception, но cascade = {CascadeType.MERG} работает хорошо - person ; 14.10.2015
comment
Я столкнулся с той же проблемой, я внес эти изменения, но это не сработало для меня. Данные не сохраняются внутри таблицы поиска / составной таблицы. - person Taimur; 29.03.2017
comment
@Taimur Если это не решит вашу проблему; затем создайте новый вопрос с максимально подробным объяснением проблемы. Также дайте мне знать адрес нового вопроса, постараюсь помочь - person Balwinder Singh; 30.03.2017
comment
Я добавил свой вопрос здесь stackoverflow.com/questions/43111692/ - person Taimur; 30.03.2017