我有一個串列,我想將它作為 JSON 字串陣列存盤在資料庫中。我已經嘗試了各種方法來做到這一點,但就是無法讓它發揮作用。
該列當前定義為:
@Column(columnDefinition = "NVARCHAR(4000)")
@ElementCollection(targetClass = String.class)
@Convert(converter = StringListConverter.class)
protected List<String> tagsT = new ArrayList<>();
當我嘗試構建它時,我得到一個映射例外“無法確定型別:java.util.List”。
或者,我也嘗試將列定義為:
@Convert(converter = StringListConverter.class)
protected ArrayList<String> tagsT = new ArrayList<>();
這構建成功,但是它生成了一個 varbinary 列,這不是我正在尋找的。如果我手動將列更改為 NVARCHAR(4000) 或 VARCHAR(255),那么寫入的資料仍然沒有意義。
我也試過:
@Column(columnDefinition = "NVARCHAR(4000)")
@ElementCollection(targetClass = String.class)
@Convert(converter = StringListConverter.class)
protected ArrayList<String> tagsT = new ArrayList<>();
但是得到了和之前一樣的結果。
對于我做錯/遺漏的任何幫助,我們將不勝感激。
謝謝。
uj5u.com熱心網友回復:
你的 StringListConverter 怎么樣?
這是 Map 的作業示例,但如果您將型別參考更改為 List,則可以根據您的情況進行調整
@Column(columnDefinition = "text")
@Convert(converter = JsonConverter.class)
private Map<String, String> connectParameters;
@Converter
public class JsonConverter implements AttributeConverter<Map<String, String>, String> {
private final static ObjectMapper objectMapper = new ObjectMapper();
private final TypeReference<Map<String, String>> mapTypeRef = new TypeReference<Map<String, String>>() {
};
@Override
public String convertToDatabaseColumn(Map<String, String> data) {
if (null == data) {
return null;
}
try {
return objectMapper.writeValueAsString(data);
} catch (JsonProcessingException ex) {
log.error("Couldn't convert data-map to JSON String.", ex);
return null;
}
}
@Override
public Map<String, String> convertToEntityAttribute(String dbData) {
if (null == dbData || dbData.isEmpty()) {
return Collections.emptyMap();
}
try {
return objectMapper.readValue(dbData, mapTypeRef);
} catch (IOException ex) {
log.error("Couldn't convert JSON String to data-map.", ex);
return null;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351325.html
上一篇:Hibernate將@OneToMany映射列保存為空值
下一篇:無法使用嵌入式物件發布JSON-它讀取和存盤除物件串列(OneToMany)之外的所有內容-SpringBootAPI( 休眠)
