springboot jpa 非hibernate和mysql對應欄位如何處理
阿新 • • 發佈:2018-12-10
背景:程式中的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類進行轉換。