java - Spring boot + jpa,通过表单提交进行多对多关联

标签 java jpa spring-boot

大家好,我刚刚开始学习 Spring Boot,想知道如何通过表单提交保存具有多对多关系的对象?

假设我们有两个实体:图书和出版商

@Entity
public class Book{
private long id;
private String name;
private List<Publisher> publishers;

public Book() {

}

public Book(String name) {
    this.name = name;
}

public Book(String name, Set<Publisher> publishers){
    this.name = name;
    this.publishers = publishers;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "book_publisher", joinColumns = @JoinColumn(name = "book_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "publisher_id", referencedColumnName = "id"))
public List<Publisher> getPublishers() {
    return publishers;
}

public void setPublishers(List<Publisher> publishers) {
    this.publishers = publishers;
  }
}

@Entity
public class Publisher {
private Long id;
private String name;
private List<Book> books;

public Publisher(){

}

public Publisher(String name){
    this.name = name;
}

public Publisher(String name, List<Book> books){
    this.name = name;
    this.books = books;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@ManyToMany(mappedBy = "publishers")
public List<Book> getBooks() {
    return books;
}

public void setBooks(List<Book> books) {
    this.books = books;
}
}

然后我们就有了一个图书存储库

public interface BookRepository extends CRUDRepository<Book, Long>{
}

crud 方法在 bookcontroller 中是什么样子的?

最佳答案

真正的问题是“连接表”有附加数据,例如出版商出版书籍的日期、该出版商的书籍 ISBN 等等...... 如果答案是肯定的,那么它需要另一个表单,这可以解决您的问题,如果不是,您会从表单中收到您输入的图书的出版商列表,并将它们分别添加到连接表中,并通过图书存储库将图书添加到图书表中...... 从我的角度来看,数据库的设计缺乏信息。 当你回答这个问题时,我会尽力帮助你以 Spring 的方式做到这一点...... 目前从数据库的角度来看,要在对象之间建立这种连接,您需要现有对象。第一个阶段是 Publisher 的表单和 Book 的表单。 众所周知,多对多是一件令人头疼的事情。 我建议在问题中添加 JPA 标签,并删除 spring-data

关于java - Spring boot + jpa,通过表单提交进行多对多关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533907/

相关文章:

java - Jpa 对象中具有不同的参数

带时间戳返回间隔的 Java Spring/PgSQL 操作

spring-boot - 将 OAuth2 登录附加到 Spring Boot 应用程序中的现有用户

java - 无法使用 SpringMVC 通过 Hibernate 将 ItemDetail 列表 ie.List<ItemDetail> (OBJECT) 插入 MySQL 数据库字段

java - 我在 Scanner.nextInt() 之后输入 Scanner.nextLine() 来使用新行,但它不起作用

java - Spring Boot 使用自定义库中的组件

java - 即使类路径中存在依赖项,Spring Boot也会显示 'can not be resolved'

java - JPA 中回滚语句和事务的区别

spring-boot - Spring Boot 2 war 文件尝试加载 el-api v3.0 类 (NoClassDefFoundError : javax/el/ELManager) on tomcat 7 (el-api 2. 2)

Java For 循环构造函数内部无限重复