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


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.