java - 使用 Spring Data JPA 的多对多映射和保存问题

标签 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)

我已将上述场景转换为 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/

相关文章:

java - Spring 事务管理 PROPAGATION_REQUIRED,ISOLATION_DEFAULT

java - JPA 2.0 & Hibernate 4.0.1 & Spring 3.1.1 兼容性

hibernate - 在这种情况下覆盖 Hibernate 延迟加载的最佳方法

java - 在Java中实现多重继承

java - sqlite 返回表中的随机记录

multithreading - 为什么spring不提供线程范围实现?

java - 在每个具体类的一对一表结构中创建外键

hibernate - 使用 JBoss 7.1.1 自定义 Hibernate 持久性提供程序

java - 当主窗口最小化时,半透明的 JDialogs 消失

java - 如何使用 Spring 创建配置类并在整个代码中共享数据?