"ChoiceField" (или: лучший Enum JPA) в Play? - PullRequest
3 голосов
/ 16 декабря 2011

Я очень привык к Django опция "choices" для поля модели:

GENDER_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)

Это позволяет для поля модели легко сопоставлять значение базы данных со строкой (представления). И работает с любым выбранным типом sql (Char, Int ...)

В JPA это невозможно; Вы можете сделать Enum: но использовать только его порядковый номер или строку. Я считаю это чрезмерным ограничением и сложностью.

Есть ли в игре! что-то похожее на Django choices, в частности, для использования с CRUD?

Или хотя бы шаблон для CRUD, чем просто объявить простую строку или int для поля модели?

Похожие:

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Основываясь на комментарии @SebCesbron, этот тип шаблона я сейчас использую ...

@Required
@Enumerated(EnumType.STRING)
public MyEnumType myenum;


public enum MyEnumType {

    ENUMONE ("label one", 1),
    ENUMTWO ("label two", 2);

    String label;
    Int value;

    CastType(String label, Int value) {            
        this.value = value;
        this.label = label;
    }

    @Override
    public String toString() {
        return this.label;
    }

    public Int getValue() {
        return this.value;
    }

    public String getLabel()
    {
        return label;
    }

}

При использовании EnumType.STRING база данных будет содержать имя элемента перечисления - переопределение toString не влияет на это, поскольку JPA использует name(), что является окончательным.

Итак, по поводу моего точного варианта использования и вопроса:

@Required
@Enumerated(EnumType.STRING)
public GenderEnum myenum;


public enum GenderEnum {

    M ("Male"),
    F ("Female");

    String label;

    CastType(String label) {
        this.value = value;
    }

    @Override
    public String toString() {
        return this.label;
    }
}
1 голос
/ 20 декабря 2011

Я не понимаю вашей проблемы с Enum, вы можете отобразить enum с помощью JPA следующим образом

@Enumerated(EnumType.STRING)
public GenderChoice genderChoice;

используйте enum в вашем коде. Разве этого недостаточно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...