Как вернуть из БД запись в enum

Есть какое-то Entity:

    @Entity
    @Table(name = "Peoples")
    public class People implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GeneratedType.AUTO)
    private Long id;
    private Profession profession;
    
    стандартные геттеры, сеттеры
}

Поле profession представлено енумом:

public enum Profession {
    MANAGER,
    COUNTER,
    ENGINEER,
}

В таблица БД поле Profession сохраняется как VARCHAR. Есть несколько записей:

id Profession
0 MANAGER
1 MANAGER
2 COUNTER

В @RestController пытаюсь вернуть все записи таблицы без каких-либо условий, через:

@Autowired
private PageingAndSortingRepository<People, Long> peopleRepository;

    @GetMapping
    public List<People> getAllPeople() {
    return peopleRepository.findAll(PageRequest.of(0, 3, Sort.by("id"))).toList();
    }

Получаю ошибку:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: For input string: "MANAGER"; nested exception is java.lang.NumberFormatException: For input string: "MANAGER"

Данные должны передаться в теле ответа в JSON виде:

{
"id":[Long]
"profession":[Profession]
}

Какие только сеттеры и геттеры не ставил, енумы пытался переписать со строковыми значениями, конвертеры пытался писать, ничего не выходит. Ни как не могу понять природу этой ошибки и от куда растут ее корни. Буду весьма признателен, если кто поможет.


Ответы (1 шт):

Автор решения: Евгений Кузнецов

Использовать аннотацию @Enumerated(EnumType.STRING) чтобы отметить способ хранения енума в базе данных.

    @Entity
    @Table(name = "Peoples")
    public class People implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GeneratedType.AUTO)
    private Long id;
    @Enumerated(EnumType.STRING)
    private Profession profession;
    
    стандартные геттеры, сеттеры
}
→ Ссылка