하이버네이트, 스프링 MVC에서 enum 사용하기 2
어제에 이어 오늘도 물고 늘어진다. 이번에 해결한 문제는, DB에 저장할 값을 int 타입 뿐만이 아니라 String 타입을 사용해도 무방하도록 코드를 수정했다.
public enum UserCate implements PersistentEnum {
ADMIN("admina", "관리자"), STAFF("staff", "직원"), SUPP("supp", "협력업체");
private final String value;
private final String descr;
private UserCate(String value, String descr) {
this.value = value;
this.descr = descr;
}
public String getValue() {
return value;
}
public String getDescr() {
return descr;
}
...
}
이건 DB에 저장할 값으로 String 값을 사용할 enum 이고..
public enum CodeCate implements PersistentEnum {
COLOR(10, "색상"), SIZE(20, "사이즈"), PAYTERM(30, "지불조건"), SHIPVIA(40, "운송방식");
private final Integer value;
private final String descr;
private CodeCate(Integer value, String descr) {
this.value = value;
this.descr = descr;
}
public int getValue() {
return value;
}
public String getDescr() {
return descr;
}
...
}
이건 DB에 저장할 값으로 int 값을 사용할 enum이다.
하이버네이트가 필요로 하는 UserType을 만들어 보자.
public class CodeCateType extends GenericEnumUserType<CodeCate>{
public CodeCateType() {
super(CodeCate.class);
}
}
public class UserCateType extends GenericEnumUserType<UserCate>{
public UserCateType() {
super(UserCate.class);
}
}
끝이다. 도메인 객체 타입에 설정해보자. 구현에 필요한 코드만 파란색으로 강조를 했다. 생성자 만드는 부분까지 없앨 수 있을 것 같다. 3차 구현에서 해보자.
Code.java
@Column
@Type(type="koma.domain.usertype.CodeCateType")
CodeCate codeCate;
User.java
@Column
@Type(type="koma.domain.usertype.UserCateType")
UserCate userCate;
자.. 이러면 하이버네이트가 CodeCate는 Integet SQL 타입 컬럼을 만들어 주고 UserCate는 String SQL 타입(varchar)를 만들어 줄 것이다.
스프링 MVC에서 바인딩 할 때 사용할 PropertyEditor는 어떨까? 한 줄 씩이다.
binder.registerCustomEditor(CodeCate.class, new GenericEnumPropertyEditor<CodeCate>(CodeCate.class));
binder.registerCustomEditor(UserCate.class, new GenericEnumPropertyEditor<UserCate>(UserCate.class));
끝인가?? 글쎄.. 모르곘다. Charater를 추가하는 것도 별 문제 없을 듯 하다. 해보자. 이러다가 모든 타입을 지원해야 하는건 아니겠지?? Char까지만 해보자. 여기서도 생성자에 클래스를 주고 있는데 3차에서는 저 코드를 없앨 수 있게 구현해보자.
자.. 하이버, 스프링에서 자바 enum 사용 간편화 3차 구현 ㄱㄱㅆ