Ответ 1
Да, возможно. Это должно быть:
@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;
У меня есть модель 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
. Я хотел бы, чтобы класс модели категории принимал переменную enum и сопоставлял ее как-то со строкой всякий раз, когда hibernate запрашивает ее.
Возможно ли это?
Да, возможно. Это должно быть:
@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;
Класс enum
public enum LevelPriority{
HIGH, MEDIUM, LOW
}
Класс Java
public class AvisosVO implements Serializable {
/**
*
*/
private static final long serialVersionUID = 5372875132849315024L;
@Id
@GeneratedValue
@Column(name = "id")
private Integer idAVisosVO;
private LevelPriority priority;
@Enumerated(EnumType.STRING)
public LevelPriority getPriority() {
return priority;
}
BD
CREATE TABLE `Avisos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`priority` int(4) NOT NULL,
PRIMARY KEY (`id`)
)
У меня был этот код в проекте, и он работает. Надеюсь, этот пример объяснит ваш вопрос лучше, чем верхний комментарий.