최대 절전 모드에서 열거 형을 문자열로 매핑


93

Category Hibernate 모델이 있습니다.

@Entity
@Table(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "type")
    private String type;

유형 문자열 필드가 있습니다. 또한 범주 유형을 나타내는 Java 열거 형이 있습니다.

public enum CategoryType {
    INCOME, OUTCOME;
}

문자열 유형 대신 사용하고 싶습니다. SQL은 varchar 매개 변수에 두 개의 고유 한 값 ( CategoryIncome또는)을 허용 CategoryOutcome합니다. Category 모델 클래스가 열거 형 변수를 받아들이고 최대 절전 모드에서 요청할 때마다 어떻게 든 문자열에 매핑하고 싶습니다.

가능합니까?

답변:


184

예, 가능합니다. 그것은해야한다:

@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;

15
더 나아가서 JPA 2.1이 출시되면 다음을 사용할 수 있습니다.@Converter(autoApply = true) public class CategoryTypeConverter implements javax.persistence.AttributeConverter <CategoryType, String>
membersound

6
같은 문제가있을 수있는 사람을 위해 .. :이 주석을 필드 대신 getter 메서드에 넣어야했습니다 @Enumerated(EnumType.STRING) public CategoryType getCategoryType() { return this.categoryType; }.
ZeroOne

나는 hibernate.ddl-auto=update모드에 있었고 내 enum을 int에서 varchar로 변환하기 위해 내 테이블을 삭제하고 최대 절전 모드로 다시 만들어야했습니다. 비슷한 문제를 가진 사람에게 도움이되기를 바랍니다.
Arashsoft

열거 형 주석에도 불구하고 열거 형 값이 서수로 기록되는 경우 stackoverflow.com/questions/44864675/…를 참조하십시오 .
metamaker

게터에는 넣지 않습니다. 변수 선언에 넣는 것은 잘 작동합니다. @Data 등을 사용하는 Lombok에 좋습니다. 각각에 주석을 달지 않고 모든 Enum에 이것을 적용하려면 어떻게해야합니까?
Andrew

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.