@Converter 사용법

greenTea·2023년 5월 31일
0

@Converter 사용법

🫠만약 db에 값을 저장할 경우 자신이 원하는 값으로 저장하길 원한다면 @Converter를 사용하면 됩니다.

사용방법은 아래와 같습니다.

@Converter

@Converter
public class RoleConverter implements AttributeConverter<Set<Role>, String> {

    @Override
    public String convertToDatabaseColumn(Set<Role> attribute) {

        return attribute.stream().map(Enum::name).collect(Collectors.joining(","));
    }

    @Override
    public Set<Role> convertToEntityAttribute(String dbData) {
        if (StringUtils.hasText(dbData))
            return Arrays.stream(dbData.split(",")).map(Role::valueOf).collect(Collectors.toSet());
        return new HashSet<>();
    }
}

🥳위 코드는 권한을 매핑하고 있는 Set을 칼러에 저장시 ,으로 묶어서 저장하는 방식입니다. convertToDatabaseColumn 메소드는 Set -> String으로 바꾸는 메소드이며 convertToEntityAttribute는 그 반대로 작용합니다.

이 후 자신이 적용하고 싶은 곳에 적용하면 됩니다.

@Convert

@Convert(converter = RoleConverter.class)
private Set<Role> roles = new HashSet<>();

😊 만약 모든 곳에 적용하고 싶다면 @ConverterautoApply=true를 적용해주시면 됩니다.

고려할 점

저의 경우 dbData에서 entity로 바꾸는 경우 split함수를 통해 가져오고 있었는데 null값을 처리해 주지 않아 문제가 생겼었습니다. 여러분도 만약 사용하게 된다면 null값도 주의해주시면 될 것 같습니다.😭

profile
greenTea입니다.

0개의 댓글