【问题标题】:many to many mapping and saving issue using Spring Data JPA使用 Spring Data JPA 的多对多映射和保存问题
【发布时间】:2015-09-13 20:35:50
【问题描述】:

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

***** 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 多对多关系保存数据的好示例。

【问题讨论】:

标签: java spring hibernate jpa spring-data


【解决方案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
}

【讨论】:

  • cascade = {CascadeType.ALL 会导致一些 Detached Entity Exception,但 cascade = {CascadeType.MERG},效果很好
  • 我面临同样的问题,我做了这些更改,但对我没有用。数据未保存在查找/复合表中。
  • @Taimur 如果这不能解决您的问题;然后创建一个新问题,尽可能详细地解释该问题。另外,请告诉我新问题的网址,我们会尽力提供帮助
  • 我在这里添加了我的问题stackoverflow.com/questions/43111692/…
猜你喜欢
  • 2020-11-30
  • 1970-01-01
  • 2015-05-10
  • 2019-07-30
  • 2018-08-21
  • 2021-02-21
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多