문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
java:jpa:converter [2018/07/11 14:43] kwon37xi |
java:jpa:converter [2018/09/18 17:52] kwon37xi [JPA Converter] |
||
---|---|---|---|
줄 3: | 줄 3: | ||
* [[java: | * [[java: | ||
* [[http:// | * [[http:// | ||
+ | * '' | ||
<code java> | <code java> | ||
@Converter | @Converter | ||
- | public class PersonNameConverter implements | + | public class PersonNameConverter implements AttributeConverter< |
- | | + | |
- | + | ||
- | private static final String SEPARATOR = ", "; | + | |
@Override | @Override | ||
public String convertToDatabaseColumn(PersonName personName) { | public String convertToDatabaseColumn(PersonName personName) { | ||
- | | + | |
- | return null; | + | |
- | } | + | |
- | + | ||
- | StringBuilder sb = new StringBuilder(); | + | |
- | if (personName.getSurname() != null && !personName.getSurname() | + | |
- | .isEmpty()) { | + | |
- | sb.append(personName.getSurname()); | + | |
- | sb.append(SEPARATOR); | + | |
- | } | + | |
- | + | ||
- | if (personName.getName() != null | + | |
- | && !personName.getName().isEmpty()) { | + | |
- | sb.append(personName.getName()); | + | |
- | } | + | |
- | + | ||
- | return sb.toString(); | + | |
} | } | ||
@Override | @Override | ||
public PersonName convertToEntityAttribute(String dbPersonName) { | public PersonName convertToEntityAttribute(String dbPersonName) { | ||
- | if (dbPersonName == null || dbPersonName.isEmpty()) { | + | // DB column to object 구현 |
- | return null; | + | |
- | } | + | |
- | + | ||
- | String[] pieces = dbPersonName.split(SEPARATOR); | + | |
- | + | ||
- | if (pieces == null || pieces.length == 0) { | + | |
- | return null; | + | |
- | } | + | |
- | + | ||
- | PersonName personName = new PersonName(); | + | |
- | String firstPiece = !pieces[0].isEmpty() ? pieces[0] : null; | + | |
- | if (dbPersonName.contains(SEPARATOR)) { | + | |
- | personName.setSurname(firstPiece); | + | |
- | + | ||
- | if (pieces.length >= 2 && pieces[1] != null | + | |
- | && !pieces[1].isEmpty()) { | + | |
- | personName.setName(pieces[1]); | + | |
- | } | + | |
- | } else { | + | |
- | personName.setName(firstPiece); | + | |
- | } | + | |
- | + | ||
- | return personName; | + | |
- | } | + | |
} | } | ||
줄 70: | 줄 27: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ===== 잘못된 Colum Type 매핑 ===== | ||
+ | * AttributeConverter 를 사용하여 String, Number 같은 다소 광의의 타입을 명시적 비즈니스 도메인 타입으로 매핑했을 때(예: ISBN), 보통 해당 타입이 '' | ||
+ | * 이때 [[https:// | ||
+ | |||
+ | <code java> | ||
+ | @Convert(converter=ISBNConverter.class) | ||
+ | @org.hibernate.annotations.Type(type=" | ||
+ | private ISBN isbn; | ||
+ | </ | ||
+ |