[英]Spring Boot Data JDBC field as json value
我有一個 model,我想將其保存到數據庫中。
@Data
public class Model {
@Id
private UUID id;
private String name;
private ModelSettings settings;
@Data
static class ModelSettings {
boolean fuelEngine;
}
}
create table model
(
id uuid not null,
name varchar(25) not null,
settings jsonb
)
我嘗試使用簡單的存儲庫方法save()
將 modelSettings 保存為 jsonb object ,但出現錯誤
ERROR: relation "settings" does not exist
我寫了自定義轉換器,我看到 modelSettings 何時轉換為 json,但在准備語句 Spring 數據后嘗試將設置字段保存到相關表。 如何判斷Spring數據只保存字段為json,而不是相關表中的行?
抱歉,我忘記了帶有 JdbcValue 的 @WritingConverter。
您好請使用嵌入式注釋:嵌入式實體用於在您的 java 數據 model 中具有值對象,即使您的數據庫中只有一張表。
@Data
public class Model {
@Id
private UUID id;
private String name;
@Embedded(onEmpty = USE_NULL)
private ModelSettings settings;
@Data
static class ModelSettings {
boolean fuelEngine;
}
}
您的實體中不能有 object 並期望JDBC
為您將其保存為 json。
您需要定義一個String column
並為其編寫一個converter
,用於在數據庫中保存和讀取。
還有一些數據庫,如Oracle
支持 json 值,但你沒有提到你正在使用哪個數據庫。
在Oracle
數據庫中,您可以定義一個包含 json 列的表,如下所示:
CREATE TABLE "USERS"
(
"ID" NUMBER(16,0) PRIMARY KEY,
"USER_NAME" VARCHAR2(85) UNIQUE NOT NULL,
"PASSWORD" VARCHAR2(48) NOT NULL,
"PROFILE" NCLOB NOT NULL CONSTRAINT profile_json CHECK ("PROFILE" IS JSON),
"SETTINGS" NCLOB NOT NULL CONSTRAINT settings_json CHECK ("SETTINGS" IS JSON),
);
您需要創建實體 class,如下所示:
@Entity
@Table(name = "Users")
public class User {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_GENERATOR")
@SequenceGenerator(name = "USER_GENERATOR", sequenceName = "USERS_SEQ", allocationSize = 1)
private Long id;
@Column(name = "USER_NAME")
private String userName;
@Column(name = "PASSWORD")
private String password;
@Lob
@Nationalized
@Column(name = "PROFILE",columnDefinition="NCLOB NOT NULL")
private String profile;
@Lob
@Nationalized
@Column(name = "SETTINGS",columnDefinition="NCLOB NOT NULL")
private String settings;
}
正如您在此處看到的, profile
和setting
是我的 json 列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.