Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zmapować kolumnę MySQL JSON na właściwość jednostki Java za pomocą JPA i Hibernate?

Wolę robić w ten sposób:

  • Tworzenie konwertera (konwertera atrybutów) z Map na String i odwrotnie.
  • Używanie Map do mapowania typu kolumny mysql JSON w klasie domeny (entity)

Kod znajduje się poniżej.

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

...

To rozwiązanie doskonale dla mnie działa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak naprawić bazy danych i tabele MySQL

  2. Co jest szybsze:wiele pojedynczych WSTAWEK czy jedna wielowierszowa WSTAWKA?

  3. Jak pobrać wyniki jako wielowymiarową tablicę z mySQL i PHP?

  4. Jak opróżnić bazę danych MySQL

  5. Czy można użyć zmiennej zdefiniowanej przez użytkownika MySql w .NET MySqlCommand?