2017-06-21 162 views
1

在我的春节,启动应用程序我有实体那样:春季启动JPA:存储实体JSON

@Entity 
@Table(name = "UserENT") 
public class User implements Serializable { 

    @Id 
    private String id; 

    private Data data; 
    ... 

我想实现这一目标数据将被存储在数据库中的JSON格式。但从数据库中选择时,它将映射到数据对象上。

感谢您的任何建议。

回答

3

您可以实现javax.persistence.AttributeConverter,如:

@Convert(converter = DataJsonConverter.class) 
private Data data; 

public class DataJsonConverter implements AttributeConverter<Data, String> { 

    private ObjectMapper objectMapper = ...; 

    @Override 
    public String convertToDatabaseColumn(Data data) { 
     try { 
      return objectMapper.writeValueAsString(data); 
     } catch (JsonProcessingException e) { 
      throw new RuntimeException("Could not convert to Json", e); 
     } 
    } 

    @Override 
    public Data convertToEntityAttribute(String json) { 
     try { 
      return objectMapper.readValue(json, Data.class); 
     } catch (IOException e) { 
      throw new RuntimeException("Could not convert from Json", e); 
     } 
    } 
} 

然后,您可以通过注解你的领域使用它