Подтвердить что ты не робот

Поле Enum в сущности JPA

Я чувствую себя немного глупым, спрашивая об этом, но я не могу найти простой ответ на вопрос.

Возьмите этот простой объект в качестве примера:

@Entity
@Table( name="clienti" )
public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;

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

    private String nome;

    private String cognome;

//...
}

Он представляет человека, поэтому я хочу добавить свойство gender.

Это будет "мужчина" или "женщина". Итак, что?

Я могу использовать String, и имейте в виду, что "m" означает "мужчина" и "f" для женщины.

Или я могу использовать логический "isMale", true или false.

Однако я не думаю, что в любом случае пуристы Hibernate были бы счастливы:)

Попытавшись немного, я обнаружил, что наилучшая практика заключается в использовании перечисления.

Я немного запутался в том, как его использовать. Можете ли вы помочь мне с примером?

4b9b3361

Ответ 1

Вы можете сопоставить свой enum с String или порядковым номером. Сопоставление с String является более переносимым подходом, так как отображение выживет, изменив порядок перечисления.

Используя ваш пример:

@Entity
@Table( name="clienti" )
public class Cliente implements Serializable {

...
    @Enumerated(EnumType.STRING)
    private Gender gender;
...
}

Строковое сопоставление будет использовать простое имя типа перечисления, поэтому у вас есть два возможных значения в БД: "Мужской" и "Женский"

public enum Gender { MALE, FEMALE }

Поставщик persistence позаботится о отображении, поэтому в вашем коде вы можете продолжить перечисление Gender и не беспокоиться о строках или ординалах.