1. 程式人生 > >springboot jpa 非hibernate和mysql對應欄位如何處理

springboot jpa 非hibernate和mysql對應欄位如何處理

    背景:程式中的entity物件中欄位expression為json字串欄位,每次前端傳過來的json物件進行轉換會時出現錯誤,由於expression被轉換為了JsonObject型別導致。

    經過多方參考測試,jpa和資料庫型別可以通過實現介面AttributeConverter<X,Y>實現該功能。

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import javax.persistence.AttributeConverter;

public class JsonObjectConverter implements AttributeConverter<JsonObject,String> {

    @Override
    public String convertToDatabaseColumn(JsonObject json) {
        return new Gson().toJson(json);
    }

    @Override
    public JsonObject convertToEntityAttribute(String dbData) {
        return new JsonParser().parse(dbData).getAsJsonObject();
    }
}

    entity實體類

@Entity
@Table
public class RuleInfo {
    @Id
    @GeneratedValue(generator = "fsId")
    @GenericGenerator(name = "fsId", strategy = "com.fs.data.ezrule.interfaces.AssignedGUIDGenerator")
    private String rid;

    @Column(columnDefinition = "text comment '規則條件json字串'")
    @Convert(converter = JsonObjectConverter.class)
    private JsonObject expression;
}

    經過上面兩個配置,每次獲取資料或儲存資料都會經過JsonObjectConverter類進行轉換。