【问题标题】:Dynamically create columns / table using SpringBoot when i make Rest api calls当我进行 Rest api 调用时,使用 Spring Boot 动态创建列/表
【发布时间】:2019-05-13 23:27:05
【问题描述】:

当我进行 REST API 调用时,我正在尝试使用 Spring-Boot 动态生成模式。例如,我使用两个不同的 JSON 主体对 http://localhost:8080/school 进行休息调用。

呼叫 1:

{id: 1111, name: "XYZ"}

呼叫 2:

/school
{id: 1234, name: "ABCD", contact: "test@test.com"}

请求正文被转换为每个请求的表或集合的架构。

表或集合名称学校

第一次通话

{id: Number, name: String}

我进行了另一个 API 调用,但传递了不同的 JSON 正文(对于调用 2):

表或集合名称学校

{ id: Number, name: String, contact: String}

谁能告诉我该怎么做,好吗?我在后端使用 MySQL 数据库。

【问题讨论】:

  • 在回答出现的第一个问题之前是:为什么?你为什么要这样做?作为一个经验法则,动态创建数据库结构 (DDL) 是一个坏主意,通常表明需要重新审视设计/架构。如果您正在构建一个多租户系统,那么了解您的一些要求是值得的。换句话说,我的简短回答/建议是:不要这样做。
  • 我这样做是为了学习如何动态创建模式。
  • 如果有使用 Springboot 的方法,请告诉我
  • 如果您使用 Spring Data 和 Hibernate,这里有一个有用的链接 - stackoverflow.com/q/42135114/9121293
  • 您是想要动态地使用不同的架构,还是想要存储具有不同结构/架构的记录?如果是后者,那么您可能需要以下内容之一:a)可选字段的可空列(例如您给出的示例中的“联系人”); b) 继承,由 JPA 映射支持; c) 将原始 JSON 存储在 Postgres(和其他)支持的数据库中; d) 一个“无模式”数据库,例如 CouchDB 或 Mongo。

标签: java mysql json rest spring-boot


【解决方案1】:

您已连接到数据库。它接受任意语句。

只要您要连接的用户拥有必要的权限,就没有什么可以阻止您使用该连接将 DDL 语句(如 CREATE TABLE 和类似的)发送到数据库。

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2018-01-24
    • 2021-11-13
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2018-08-11
    • 2020-09-12
    相关资源
    最近更新 更多