Java 使用Spring数据JPA的多对多映射和保存问题

Java 使用Spring数据JPA的多对多映射和保存问题,java,spring,hibernate,jpa,spring-data,Java,Spring,Hibernate,Jpa,Spring Data,我有一个数据库模式,其中我必须映射多对多关系 ***** 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)

我有一个数据库模式,其中我必须映射多对多关系

***** 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
}
但我只想要三张桌子

 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
}
@实体
公共阶层人士{
@身份证
@生成值
私有整数id;
私有字符串名称;
@ManyToMany(targetEntity=Color.class,cascade={CascadeType.ALL})
@JoinTable(name=“person\u color”,joinColumns={@JoinColumn(name=“person\u id”)},
inverseJoinColumns={@JoinColumn(name=“color\u id”)})
私有列表颜色;
///二传手和接球手都在那里
}
将颜色类更新为以下内容

@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
}
@实体
公共类颜色{
@身份证
@生成值
私有整数id;
私有字符串颜色;
@ManyToMany(mappedBy=“colors”,cascade=CascadeType.ALL)
私人名单人员;
///二传手和接球手都在那里
}

检查此链接可能对您有所帮助:
cascade={CascadeType.ALL
会导致一些
分离实体异常
,但
cascade={CascadeType.MERG}
,效果很好我也面临同样的问题,我做了这些更改,但对我没有效果。数据未保存在查找/组合表中。@Taimur如果这不能解决您的问题,请创建一个新问题,尽可能详细地解释问题。另外,请让我知道新问题的url,我将尝试帮助您解决我添加的问题我的问题在这里