를 하려고 했으나.. 가령.
@Entity
@Table(catalog = XXX.CCC, name = "hotel")
public class Hotel {
...
@Column(name = "spec")
@Convert(converter = HotelSpecJsonConverter.class)
private HotelSpec spec;
위 spec 컬럼은 json 으로 저장되어 있다. 해서 HotelSpecJsonConverter 를 지정해서 사용했으나..
다른 테이블에도 json으로 저장되어 있는 컬럼들이 여기저기 많아서 그때마다 AttributeConverter 를 구현하는 건 좀 무리라는 생각.
제너릭하게 이런 형태를 원했으나 @Convert를 지정할때 타입을 보낼 수 없으니.
Fail Source~
public class HotelSpecJsonConverter<T> implements AttributeConverter<T, String>{
Success Source~
해서 AttributeConverter 를 확장한 인터페이스 하나 더 만들고.
public interface ColumnJsonConverter<T> extends AttributeConverter<T, String> {
@Override
default String convertToDatabaseColumn(T t) {
...
}
@Override
default T convertToEntityAttribute(String v) {
...
}
}
default로 구현 소스 만들어 놓고 이놈을 다시 Converter로...콜록.
@Converter(autoApply=true)
public class HotelSpecJsonConverter implements ColumnJsonConverter<HotelSpec>{
....
}
다시 적용.
@Column(name = "spec")
@Convert(converter = HotelSpecJsonConverter.class)
private HotelSpec spec;
이렇게 하니 뭐.. 클래스는 늘어나도 구현 소스는 그나마.. 뭐 더 명시적이니 좋다라고 자기위안을 삼아본다.
그나저나... 뭔 테이블에 json 저장이 이렇게 많은지 거기에!!! key가 동적이야...그럼 Map으로 해야 되는데...
거기에!!! 특정 column에 json문구를 like 검색을 하는 곳도 있다.. like '%Text%' ...
엌...
작업 끝난 후에 마이그레이션도 해야되것네.. 허허.