sql >> データベース >  >> RDS >> Mysql

JPAとHibernateを使用してMySQLJSON列をJavaエンティティプロパティにマップする方法

    私はこの方法を好みます:

    • マップから文字列へ、またはその逆にコンバーター(属性コンバーター)を作成します。
    • マップを使用してドメイン(エンティティ)クラスのmysqlJSON列タイプをマップする

    コードは次のとおりです。

    @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. SQLServerアラートを設定するための4つのヒント

    2. 文字列からMySQLSETを作成する

    3. プリペアドステートメントを使用したSQLORDERBY

    4. MySql、日付と時刻の列をタイムスタンプに結合