sql >> Database teknologi >  >> RDS >> Mysql

Sådan knytter du en MySQL JSON-kolonne til en Java-entitetsejendom ved hjælp af JPA og Hibernate

Jeg foretrækker at gøre på denne måde:

  • Oprettelse af konverter (attributkonverter) fra kort til streng og omvendt.
  • Brug af Map til at kortlægge mysql JSON-kolonnetype i domæne (entity) klasse

Koden er nedenfor.

@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<>();

...

Denne løsning fungerer perfekt for mig.



  1. Tips til læse-/skrivelåse afhængigt af transaktionsisolationsniveau i MSSQL

  2. percentiler fra histogramdata

  3. Sådan deaktiveres en CHECK-begrænsning i SQL Server (T-SQL-eksempler)

  4. Brug streng indeholder funktion i oracle SQL-forespørgsel