gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:18 31 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 字段为空,因为它是一个 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/35613527/

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