我想创建一个表,其中包含一个名为 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;
}
}
列的类型应为
String
,并且应使用 ObjectMapper.writeValueAsString()
写入值,并使用 ObjectMapper.readValue
读取值。那么如何用liquibase来处理就应该清楚了。
使用字符串(varchar/text)并不能真正解决问题,但它是一种解决方法,如果你愿意放弃对 JSON 的支持(例如在 PostgreSQL 中)。
我在测试时遇到了这个问题 - 因为 H2 似乎不支持 JSONB。然而,生产 PostgreSQL 数据库确实如此,并且似乎工作得很好,如下所示:
- column:
name: my_column
type: jsonb