Зіставлення переліку в рядок у сплячому режимі


92

У мене є модель 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. Я хотів би, щоб клас моделі Model прийняв змінну enum - і якось зіставив її з рядком, коли про це вимагає сплячий режим.

Це можливо?

Відповіді:


182

Так, можливо. Вона повинна бути:

@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
Для тих , хто міг би мати таку ж проблему .. Я повинен був поставити цю анотацію на мій метод отримання замість поля, як це: @Enumerated(EnumType.STRING) public CategoryType getCategoryType() { return this.categoryType; }.
ZeroOne

Я був у hibernate.ddl-auto=updateрежимі, і мені довелося скинути таблицю і дозволити hibernate створити її знову, щоб перетворити моє перерахування з int на varchar. Сподіваюся, це допоможе комусь із подібною проблемою.
Arashsoft

Дивіться stackoverflow.com/questions/44864675/…, якщо ваше значення перерахування пишеться як порядкове, незважаючи на перелічену анотацію.
metamaker

Я не ставлю його на геттер. Поміщення його в декларацію змінної працює нормально, що добре для Ломбока за допомогою @Data тощо. Що робити, якщо я хочу застосувати це до всіх Enums, не коментуючи кожного з них?
Ендрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.