Как сделать роли в базе данных с ENUM

Хочу реализовать, чтобы у пользователей были роли. Есть 2 Entity: user и role. В базе данных прописаны стандартные атрибуты. Для User: id,name,surname,phone,role,email. Для role:id,name. Где и как прописать мне через ENUM 3 роли: "ADMIN, LANDLORD, TENANT". Мы создадим новый класс ROLES, (либо вообще можно не создавать, наверное, а просто перечислим в классе), где будет хранить эти три роли. А как нам их соединить с USER и ROLE?

Пример POST запроса, который буду делать для добавления пользователя: Вася, Петренко,910382741, [email protected], ADMIN Первые 4 атрибута работают, а вот как сделать поле для роли - не понимаю.

USER

@Data
@Entity
@Table(name = "user", schema = "task")
public class User {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    // Связали роли OneToMany к Роли, здесь точно нужно использовать список?
    @OneToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,
            CascadeType.REFRESH
    })
    @JoinColumn(name = "id")
    private List<Role> role;

    @Column(name = "surname", nullable = false)
    private String surname;
    @Column(name = "name", nullable = false)
    private String name;
    @Column(name = "email", nullable = false, unique = true)
    private String email;
    @Column(name = "phone", nullable = false, unique = true)
    private Integer phone;
}

ROLE

@Data
@Entity
@Table(name = "role", schema = "task")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

}

Класс с ролями

public enum Roles {
    TENANT,LANDLORD,ADMIN
}

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

Автор решения: Barmaley

Надо сделать тип enum с текстовыми значениями:

public enum Roles {
    TENANT ("tenant"),
    LANDLORD ("landlord"),
    ADMIN ("admin");

    private final String name;       

    private Roles(String s) {
        name = s;
    }

    public boolean equalsName(String otherName) {
        return name.equals(otherName);
    }

    public String toString() {
       return this.name;
    }
}

Дальше уже дело техники писать в БД их текстовые значения, а при извлечении из БД маппировать на enum Roles

→ Ссылка