我有一个数据库模式,我必须在其中映射多对多关系
***** 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 as
@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 类更新为以下内容
@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
}
将您的颜色类更新为以下
@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
}
关于java - 使用 Spring Data JPA 的多对多映射和保存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554297/