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

我有一个具有以下结构的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字段为空,因为它是一个瞬态字段。我必须使用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文件中之外,无需执行任何操作。

以上是 将JPA实体的JSON字符串列自动映射到Java对象 的全部内容, 来源链接: utcz.com/qa/420303.html

回到顶部