liquibase 中的 JSON 数据列

问题描述 投票:0回答:2

我想创建一个表,其中包含一个名为 data 的列,它将存储 json 数据。我如何在我的 xml 文件中添加该列,以及如何在我的 Model 类中创建它。目前我正在这样做,但我没有知道是否正确。

 <changeSet author="ABC" id="HUI">
        <createTable tableName="archived_table">
            <column autoIncrement="true" name="id" type="BIGINT">
                <constraints primaryKey="true"
                             primaryKeyName="archive_tablePK" />
            </column>
            <column name="created" type="TIMESTAMP(6)">
            </column>
            <column name="data" type="jsonb"/>
        </createTable>
    </changeSet>

至于我的模型课,我会这样

@Entity
@Table(name = "archived_table")
public class ArchiveModel extends  BaseModel{
    @Column(nullable = false)
    private JSONObject data;

public ArchiveDataModel(
            JSONObject data,
    ){
        super();
        this.data=data;
    }

 public JSONObject getData() {
        return data;
    }

    public void setData(JSONObject data) {
        this.data = data;
    }
}
spring-boot liquibase
2个回答
2
投票

列的类型应为

String
,并且应使用
ObjectMapper.writeValueAsString()
写入值,并使用
ObjectMapper.readValue
读取值。那么如何用liquibase来处理就应该清楚了。


0
投票

使用字符串(varchar/text)并不能真正解决问题,但它是一种解决方法,如果你愿意放弃对 JSON 的支持(例如在 PostgreSQL 中)。

我在测试时遇到了这个问题 - 因为 H2 似乎不支持 JSONB。然而,生产 PostgreSQL 数据库确实如此,并且似乎工作得很好,如下所示:

          - column:
              name: my_column
              type: jsonb
© www.soinside.com 2019 - 2024. All rights reserved.