@Converter
์ปจ๋ฒํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ํฐํฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์ ์๋ค.
์๋ฅผ ๋ค์ด์ ํ์์ VIP์ฌ๋ถ๋ฅผ ์๋ฐ์ boolean ํ์ ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๊ณ ํ์.
JPA๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ์ boolean ํ์ ์ ๋ฐฉ์ธ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ 0 ๋๋ 1๋ก ์ ์ฅ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ซ์ ๋์ Y ๋๋ N์ผ๋ก ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
๊ทธ๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ปจ๋ฒํฐ๋ค.
์ฌ์ฉ
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
@Convert(converter = BooleanToYNConverter.class)
private boolean vip;
}
@Converter
public class BooleanToYNConverter implements AttributeConverter<Boolean, String > {
@Override
public String convertToDatabaseColumn(Boolean attribute) {
return (attribute != null && attribute) ? "Y" : "N";
}
@Override
public Boolean convertToEntityAttribute(String dbData) {
return "Y".equals(dbData);
}
}
์ปจ๋ฒํฐ ํด๋์ค๋ @Converter ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ณ , AttributeConverter ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ค๋ฆญ์ ํ์ฌ ํ์ ๊ณผ ๋ณํํ ํ์ ์ ์ง์ ํด์ผ ํ๋ค.
์ฌ๊ธฐ์๋ Boolean์ String ์ผ๋ก ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ <Boolean, String>์ ์ ์ด์ฃผ์๋ค.
์ถ๊ฐ๋ก @Convert๋ ๋ค์๊ณผ ๊ฐ์ด ํด๋์ค ๋ ๋ฒจ์๋ ์ค์ ํ ์ ์๋ค.
@Convert(converter = BooleanToYNConverter.class, attributeName = "vip")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private boolean vip;
}
๋จ ์ด๋๋ attributeName์ ๊ผญ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค.
๊ธ๋ก๋ฒ ์ ์ฉ
๋ชจ๋ Boolean ํ์ ์ ์๋์ผ๋ก ์ปจ๋ฒํฐ๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด @Converter์ autoApply ์์ฑ์ true๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
@Converter(autoApply = true)
public class BooleanToYNConverter implements AttributeConverter<Boolean, String > {
@Override
public String convertToDatabaseColumn(Boolean attribute) {
return (attribute != null && attribute) ? "Y" : "N";
}
@Override
public Boolean convertToEntityAttribute(String dbData) {
return "Y".equals(dbData);
}
}
๊ธ๋ก๋ฒ ์ค์ ์์ ์ ์ธํ๊ณ ์ถ๊ฑฐ๋ ์์ ๋ฐ์ ์ปจ๋ฒํฐ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด @Convert์ disableConversion ์์ฑ์ false๋ก ์ฃผ์.
๐ Reference
[์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ]
'๐๏ธ Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ๊ณ ๊ธ ์ฃผ์ - ์์ธ ์ฒ๋ฆฌ (0) | 2021.12.23 |
---|---|
[JPA] ๋ฆฌ์ค๋ - ์ํฐํฐ์ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ฅธ ์ด๋ฒคํธ ์ฒ๋ฆฌ (3) | 2021.12.21 |
[JPA] JPA๊ฐ ์ง์ํ๋ ์ปฌ๋ ์ (0) | 2021.12.21 |
[JPA] @OrderBy - ๋ฆฌ์คํธ์ ์์ ์ง์ ํ๊ธฐ (0) | 2021.12.21 |
[JPA] OSIV ๋? (6) | 2021.12.20 |