CloningJsonSerializer.java

package access.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.hypersistence.utils.hibernate.type.util.JsonSerializer;

public class CloningJsonSerializer implements JsonSerializer {

    private final ObjectMapper objectMapper;

    public CloningJsonSerializer(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    @Override
    @SuppressWarnings("unchecked")
    public <T> T clone(T value) {
        if (value == null) {
            return null;
        }
        if (value instanceof String) {
            return value;
        }
        // Serialize and deserialize back to clone
        return (T) objectMapper.convertValue(value, value.getClass());
    }
}