我有一個要保存到資料庫的模型。
@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
)
我嘗試使用簡單的存盤庫方法將 modelSettings 保存為 jsonb 物件save(),但出現錯誤
ERROR: relation "settings" does not exist
我撰寫了自定義轉換器,我看到 modelSettings 何時轉換為 json,但在準備陳述句 Spring Data 之后嘗試將設定欄位保存到相關表。如何告訴 Spring Data 僅將欄位保存為 json,而不是相關表中的行?
uj5u.com熱心網友回復:
嗨,請使用嵌入式注釋:嵌入式物體用于在您的 java 資料模型中具有值物件,即使您的資料庫中只有一個表。
@Data
public class Model {
@Id
private UUID id;
private String name;
@Embedded(onEmpty = USE_NULL)
private ModelSettings settings;
@Data
static class ModelSettings {
boolean fuelEngine;
}
}
uj5u.com熱心網友回復:
抱歉,我忘記了帶有 JdbcValue 的 @WritingConverter。
uj5u.com熱心網友回復:
您的物體中不能有一個物件,并希望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),
);
您需要創建您的物體類,如下所示:
@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 列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429725.html
