Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách ánh xạ một cột MySQL JSON sang một thuộc tính thực thể Java bằng JPA và Hibernate

Tôi thích làm theo cách này hơn:

  • Tạo bộ chuyển đổi (bộ chuyển đổi thuộc tính) từ Bản đồ sang Chuỗi và ngược lại.
  • Sử dụng Bản đồ để ánh xạ loại cột JSON của mysql trong lớp miền (thực thể)

Mã dưới đây.

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

...

Giải pháp này hoàn toàn phù hợp với tôi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để lấy tổng cho mọi giá trị khác biệt trong một cột khác?

  2. Tiện ích mở rộng mysql không được dùng nữa và sẽ bị xóa trong tương lai:hãy sử dụng mysqli hoặc PDO để thay thế

  3. MySQL INTERVAL Mins

  4. CHỌN bản ghi mới nhất có giá trị không rỗng trong một cột

  5. Viết một truy vấn MySQL phức tạp