Enum Type 만들기
클래스 구현하기.
- EnhancedUserType와 ParameterizedType 인터페이스를 구현한다.
private Class<Enum> enumClass; public void setParameterValues(Properties parameters) { String enumClassName = parameters.getProperty("enumClassname"); try { enumClass = ReflectHelper.classForName(enumClassName); } catch (ClassNotFoundException cnfe) { throw new HibernateException("Enum class not found", cnfe); } } public Class returnedClass() { return enumClass; } public Object fromXMLString(String xmlValue) { return Enum.valueOf(enumClass, xmlValue); } public String objectToSQLString(Object value) { return '
- setParameterValues()는 클래스 이름 가져와서 Class 변수에 세팅한다.
- fromXMLString(), objectToSQLString(), toXMLString()는 XML과 Enum의 value를 맵핑한다.
- nullSafeGet()는 DB에서 value를 읽은 다음 Enum으로 반환한다.
- nullSafeSet()는 Enum에서 DB로 저장할 value를 뽑아낸다.
맵핑하기
- JPA의 경우 커스텀 타입 클래스 만들지 않고도 String으로 저장하거나, 선택된 Enum의 value를 저장할 수 있다.
public class Comment { ... @Enumerated(EnumType.STRING) @Column(name = "RATING", nullable = false, updatable = false) private Rating rating; ... }
쿼리 작성하기
- 다음과 같이 쿼리를 작성할 수 있다.
Query q =
session.createQuery(
"from Comment c where c.rating = auction.model.Rating.BAD"
);
- c.rating의 rating은 DB 컬럼의 이름이 아니라 객체의 속성이름이다.
"from Member m where m.memberType = '" + MemberType.ADMIN + "'" "from Member m where m.memberType = chapter5.customType.example.MemberType.ADMIN"
- setParameterValues()는 클래스 이름 가져와서 Class 변수에 세팅한다.
- fromXMLString(), objectToSQLString(), toXMLString()는 XML과 Enum의 value를 맵핑한다.
- nullSafeGet()는 DB에서 value를 읽은 다음 Enum으로 반환한다.
- nullSafeSet()는 Enum에서 DB로 저장할 value를 뽑아낸다.
맵핑하기
- JPA의 경우 커스텀 타입 클래스 만들지 않고도 String으로 저장하거나, 선택된 Enum의 value를 저장할 수 있다.
public class Comment { ... @Enumerated(EnumType.STRING) @Column(name = "RATING", nullable = false, updatable = false) private Rating rating; ... }
쿼리 작성하기
- 다음과 같이 쿼리를 작성할 수 있다.
Query q =
session.createQuery(
"from Comment c where c.rating = auction.model.Rating.BAD"
);
- c.rating의 rating은 DB 컬럼의 이름이 아니라 객체의 속성이름이다.
"from Member m where m.memberType = '" + MemberType.ADMIN + "'" "from Member m where m.memberType = chapter5.customType.example.MemberType.ADMIN"
- setParameterValues()는 클래스 이름 가져와서 Class 변수에 세팅한다.
- fromXMLString(), objectToSQLString(), toXMLString()는 XML과 Enum의 value를 맵핑한다.
- nullSafeGet()는 DB에서 value를 읽은 다음 Enum으로 반환한다.
- nullSafeSet()는 Enum에서 DB로 저장할 value를 뽑아낸다.
맵핑하기
- JPA의 경우 커스텀 타입 클래스 만들지 않고도 String으로 저장하거나, 선택된 Enum의 value를 저장할 수 있다.
public class Comment { ... @Enumerated(EnumType.STRING) @Column(name = "RATING", nullable = false, updatable = false) private Rating rating; ... }
쿼리 작성하기
- 다음과 같이 쿼리를 작성할 수 있다.
Query q =
session.createQuery(
"from Comment c where c.rating = auction.model.Rating.BAD"
);
- c.rating의 rating은 DB 컬럼의 이름이 아니라 객체의 속성이름이다.
"from Member m where m.memberType = '" + MemberType.ADMIN + "'" "from Member m where m.memberType = chapter5.customType.example.MemberType.ADMIN"