sql >> Databáze >  >> RDS >> Mysql

Jak namapovat sloupec MySQL JSON na vlastnost entity Java pomocí JPA a Hibernate

Dávám přednost tomuto způsobu:

  • Vytvoření převodníku (převaděče atributů) z mapy na řetězec a naopak.
  • Použití mapy k mapování typu sloupce mysql JSON ve třídě domény (entity)

Kód je níže.

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

...

Toto řešení mi dokonale vyhovuje.



  1. Jak určit kartu v postgresové front-end COPY

  2. Dotaz Mysql na odstranění duplicitních komentářů Wordpress?

  3. Woocommerce:Uživatelé mohou koupit produkt pouze jednou

  4. Jak mysql objednává řádky se stejnou hodnotou?