sql >> Databasteknik >  >> RDS >> Mysql

Hur man mappar en MySQL JSON-kolumn till en Java-entitetsegenskap med JPA och Hibernate

Jag föredrar att göra så här:

  • Skapa omvandlare (attributomvandlare) från karta till sträng och vice versa.
  • Använda Map för att mappa mysql JSON-kolumntyp i domänklass (entitet)

Koden finns nedan.

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

...

Den här lösningen fungerar perfekt för mig.



  1. MySQL - Hur man infogar i en tabell som har många-till-många-relation

  2. Hur skapar man en SQL-injektionsattack med Shift-JIS och CP932?

  3. Vad är en lagrad procedur?

  4. Hur kan jag infoga kolumnkommentarer i PostgreSQL via Python?