如何从 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的主要内容,如果未能解决你的问题,请参考以下文章

解析 JSON 以在 JQuery 中创建二维数组

如何在 Sequelize 中创建一个表以使用 Node JS 存储在 Postgresql 中

如何在 SQL 中创建临时表以用于多个 ADF 活动?

如何连接两个表以在视图中获取输出

如何过滤我的表以在 Oracle 中显示结果?

授予权限以在 oracle sql 过程中创建表