如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API
Posted
技术标签:
【中文标题】如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API【英文标题】:How to create a table in DB from a JSON array to make a REST API in Spring Boot 【发布时间】:2021-05-17 04:17:14 【问题描述】:大家下午好。
我从 Spring JSON 和 API Rest 开始,我正在做我的第一次练习,它包含一个带播放列表的 REST API,如下所示:
"name":"Lista 1",
"description": "Lista de canciones de Spotify",
“songs”:
[
"title": "",
"artist": "",
"album": "",
"year": ""
,
"title": "",
"artist": "" ,
"album": "",
"year": ""
,
… ]
为了练习,我想在 BD 中为这个 JSON 创建一个表,所以我创建了我的实体(我不知道我使用 POJO 是否正确):
package com.example.api.songs.entity;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "songs_list")
public class SongsList
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@Column(name = "songs")
private List<Songs> songs;
public class Songs
public String title;
public String artist;
public String album;
public int year;
现在我想使用 JPA 和 spring.jpa.hibernate.ddl-auto = create 开始我的表,但我对歌曲字段有疑问,因为它是一个多维数组。起初我会想到这样的事情,但我不知道这样做是否正确:
CREATE TABLE LIST_SONGS (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
DESCRIPTION VARCHAR(50) NOT NULL,
SONGS VARCHAR[][][]
);
或者您是否建议创建 2 个单独的实体?
【问题讨论】:
【参考方案1】:@Entity
中的名称属性不适用于表名
表名始终使用大写
使用Long
作为id
表名应该类似于SONGS_LISTS
,因为每条记录都是一个“歌曲列表”。当然最好找一个更好的名字。
始终为外键约束指定名称
@Entity
@Table(name = "SONGS_LISTS")
public class SongsListEntity
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "songsList")
private List<SongEntity> songs = new ArrayList<>();
@Entity
@Table(name = "SONGS")
public class SongEntity
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SONGS_LIST_ID")
private SongsListEntity songsList;
what is @JoinColumn and how it is used in Hibernate
【讨论】:
非常感谢您的更正,现在在数据库级别,据我所知,我必须创建 2 个表,其中 SONGS_LISTS 表中的每个 SONGS 都有一个外部表,对吗?SONGS
中的@CesarJusto,让 Hibernate 创建表,您将看到正确的 DDL。最好也为外键约束指定一个名称。
所以我不需要创建任何 ddl,只需启动它并配置 spring.jpa.hibernate.ddl-auto = create 应该会创建我的表,对吧?
@CesarJusto 是的。之后,如果您愿意,您可以使用已创建的 DDL 作为示例来创建 DDL。
感谢您的帮助,我正在测试,但是我有一些问题,我在一个新问题***.com/questions/66227521/… 中发布了以上是关于如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API的主要内容,如果未能解决你的问题,请参考以下文章