@Enumerated ведет себя как ожидалось. Он собирается вернуть имя перечисления, и это то, что сохраняется. Помните, что JPA использует name () из перечисления, а не toString (), даже если вы переопределили toString (). Я бы порекомендовал использовать AttributeConverter (JPA 2.1+) для контроля сохранности вашего перечисления. В вашем случае создайте конвертер для использования метода getText (), который вы уже определили в своем Enum.
@Converter(autoApply = true)
public class AccountRoleConverter implements AttributeConverter<AccountRole, String> {
@Override
public String convertToDatabaseColumn(AccountRole role) {
return role.getText();
}
@Override
public AccountRole convertToEntityAttribute(String dbData) {
return AccountRole.fromText(dbData);
}
}
Примечание. @Converter (autoApply = true) указывает провайдеру JPA использовать его для сопоставления всех перечислений AccountRole.
Теперь вам просто нужно убедиться, что вы удалили @Enumerated из вашей учетной записи:
@Enumerated(EnumType.STRING)
@Column(name = "account_role", length = 40)
private AccountRole accountRole;
становится
@Column(name = "account_role", length = 40)
private AccountRole accountRole;
Хорошо, вы можете спросить, как вы используете конвертер. Ну, это хорошая часть, вам не нужно ничего делать. Поставщик постоянства будет использовать его для всех операций чтения и записи. Надеюсь, это поможет.