如何在 Spring Boot 中加入 SQL 表?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中加入 SQL 表?【英文标题】:How to join SQL tables in Spring Boot? 【发布时间】:2021-09-01 21:35:04 【问题描述】:如何将 Author 类中的 author_firstName 和 author_lastName 与 Book 类绑定?我使用 h2 数据库,author_id 和 book_id 是主键,我使用邮递员
public class Book
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "book_id")
private int id;
@Column(name = "book_title")
private String title;
@Column(name = "book_genre")
private String genre;
@Column(name = "author")
private String author;
@Entity
@Table(name="Author")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Author
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="author_id")
private int authorId;
@Column(name="author_firstName")
private String firstName;
@Column(name="author_lastName")
private String lastName;
@Column(name="author_birth")
private Date birth;
【问题讨论】:
我建议阅读有关 JPA 的教程,例如this one over at Baeldung 或 official JavaEE documentation。 所以我需要使用ManyToOne关系? 通常书籍可以有多个作者,任何作者都可以有多个书籍。所以它的many-to-many
。但是你可以根据你的应用说它的one-to-many
。
是的,你是对的,所以我将使用多对多,但我有 Set,它不能在 Postman 中用 JSON 表示?
它是一个集合,您可以将它表示为 JSON 中的对象列表。像这样[ "authorId": 1, "authorId": 2 ]
【参考方案1】:
如果对author
使用字符串参数,您应该将其转换为@ManyToOne 关系:
@Entity
@Table(name="Author")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Author
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="author_id")
private int authorId;
@Column(name="author_firstName")
private String firstName;
@Column(name="author_lastName")
private String lastName;
@Column(name="author_birth")
private Date birth;
@OneToMany(mappedBy = "author")
private List<Book> books;
@Entity
public class Book
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "book_id")
private int id;
@Column(name = "book_title")
private String title;
@Column(name = "book_genre")
private String genre;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
使用此模型,您将能够从任何入口点、作者的书籍(特定作者所写的书籍)或拥有书籍的作者(作者所写书籍的集合)中获取数据。
您可以使用findAll
Spring Data JPA 实现的默认实现(如果您使用 EAGER 提取类型,将自动连接两个表),或者构建您自己的 JPQL:
FROM Author a FETCH JOIN a.books b WHERE a.id = b.author
.
这将有助于您的代码的易读性并改进您的数据库数据规范化。
【讨论】:
以上是关于如何在 Spring Boot 中加入 SQL 表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R2DBC 和 Spring WebFlux 中加入多个表?