gpt4 book ai didi

java - 自动将 JPA 实体的 JSON 字符串列映射到 Java 对象

转载 作者:行者123 更新时间:2023-11-29 15:45:50 25 4
gpt4 key购买 nike

我有一个具有以下结构的 JPA 实体对象:

@Table(name="item_info")
class Item(){
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

@Column(name="item_name")
private String itemName;

@Column(name="product_sku")
private String productSku;

@Column(name="item_json")
private String itemJsonString;

@Transient
private ItemJson itemJson;

//Getters and setters

}

itemJsonString 字段包含一个 json 字符串值,例如 '{"key1":"value1","key2":"value2"}'

itemJson 字段包含映射到 json 字符串的相应对象。

我从数据库获取这个实体对象,如下所示:

Item item = itemRepository.findOne(1L);    // Returns item with id 1

现在,itemJson 字段为 null,因为它是 transient 字段。我必须使用 Jackson 的 ObjectMapper 手动设置它,如下所示:

itemJson = objectMapper.readValue(item.getItemJsonString(), ItemJson.class);

如何才能使当我执行 itemRepository.findOne() 时,它返回一个 Item 对象,其中 itemJson 字段自动映射到 json 字符串?

最佳答案

最好的选择是实现 javax.persistence.Converter。它看起来像:

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<ItemJson, String> {

@Override
public String convertToDatabaseColumn(ItemJson entityValue) {
if( entityValue == null )
return null;

ObjectMapper mapper = new ObjectMapper();

return mapper.writeValueAsString(entityValue);
}

@Override
public ItemJson convertToEntityAttribute(String databaseValue) {
if( databaseValue == null )
return null;

ObjectMapper mapper = new ObjectMapper();

return mapper.readValue(databaseValue, ItemJson.class);

}
}

我已将其与 WildFly 一起使用,除了将其放在我正在部署的 war 文件中之外,无需执行任何操作。

关于java - 自动将 JPA 实体的 JSON 字符串列映射到 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com