sql >> Database >  >> RDS >> Mysql

Een MySQL JSON-kolom toewijzen aan een Java-entiteitseigenschap met behulp van JPA en Hibernate

Ik doe het liever op deze manier:

  • Converter (attribuutconverter) maken van Map naar String en vice versa.
  • Kaart gebruiken om mysql JSON-kolomtype toe te wijzen aan domein (entiteit) klasse

De code staat hieronder.

@Converter
public class JsonToMapConverter 
                    implements AttributeConverter<String, Map<String, Object>> 
{
    private static final Logger LOGGER = LoggerFactory.getLogger(JsonToMapConverter.class);

    @Override
    @SuppressWarnings("unchecked")
    public Map<String, Object> convertToDatabaseColumn(String attribute)
    {
        if (attribute == null) {
           return new HashMap<>();
        }
        try
        {
            ObjectMapper objectMapper = new ObjectMapper();
            return objectMapper.readValue(attribute, HashMap.class);
        }
        catch (IOException e) {
            LOGGER.error("Convert error while trying to convert string(JSON) to map data structure.");
        }
        return new HashMap<>();
    }

    @Override
    public String convertToEntityAttribute(Map<String, Object> dbData)
    {
        try
        {
            ObjectMapper objectMapper = new ObjectMapper();
            return objectMapper.writeValueAsString(dbData);
        }
        catch (JsonProcessingException e)
        {
            LOGGER.error("Could not convert map to json string.");
            return null;
        }
    }
}
...

@Column(name = "meta_data", columnDefinition = "json")
@Convert(attributeName = "data", converter = JsonToMapConverter.class)
private Map<String, Object> metaData = new HashMap<>();

...

Deze oplossing werkt perfect voor mij.



  1. Class.forName(com.mysql.jdbc.Driver).newInstance()

  2. Wat is er nieuw in ProxySQL 2.0

  3. Ruimte berekenen en besparen in PostgreSQL

  4. Gebruik TYPEPROPERTY() om informatie over een gegevenstype in SQL Server te retourneren