首页 > 解决方案 > 如何将作为对象的 Java 类属性映射到单个 JPA 表列?

问题描述

我有一个使用 JPA 映射到底层 SQL 数据库的 Sprint Boot Web 服务。

其中一个域类有一个属性,它是一个复杂的 Java 对象,我不想与普通的映射/连接表一起保留它。相反,我想将此 Java 对象映射到主表中的单个列,并理想地将数据以 JSON 格式存储在字符串列中。

有什么建议么?

标签: javaobjectjpa

解决方案


您可以使用 jpa 的AttributeConverter

@Converter
public class MyObjectConverter implements AttributeConverter<MyObject, String> {
 @Override
 public String convertToDatabaseColumn(MyObject myObject) {
    //convert myobject to json: for instance use ObjectMapper from Jackson
    if( myObject == null )
        return null;

    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(myObject );
 }

 @Override
 public MyObject convertToEntityAttribute(String myObjectString) {
    // convert myObjectString back to object
    if( myObjectString== null )
        return null;

    ObjectMapper mapper = new ObjectMapper();
    return mapper.readValue(myObjectString, MyObject.class);
 }  
}

并在您的实体中使用它作为..

@Column
@Converter(converter = MyObjectConverter.class)
MyObject myObject;

推荐阅读