Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съпоставите MySQL JSON колона със свойство на Java обект, използвайки JPA и Hibernate

Предпочитам да направя така:

  • Създаване на конвертор (преобразувател на атрибути) от карта в низ и обратно.
  • Използване на Map за картографиране на типа на mysql JSON колона в клас на домейн (обект)

Кодът е по-долу.

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

...

Това решение работи перфектно за мен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP Mysql се свързва между бази данни

  2. Отключване на таблици, ако нишката е загубена

  3. Какво е значението на <> в mysql заявката?

  4. Време за съхранение в MySQL - тип данни?

  5. Как да предадете множество променливи към PHP с jQuery