Отображение перечислимых типов JPA. Лучший подход

Как обычно, типы перечислений Java имеют соответствующие коды и описание имени. И классы Java, которые содержат такие поля, содержат их как Enum:

public enum MyEnum{
    SOMEINSTANCE(1, "test1"),
    SOMEINSTANCE(2, "test2");

    private final int code;
    private final String name;
    private MyEnum(int code, String name){
        this.code = code;
        this.name = name;
    }
    ... helper getter for code and name
}

@Entity
puclic class EnumHolder{
    private MyEnum myEnum;
}

Я новичок в JPA, но я хочу иметьmyEnums'стол, выглядел как:

code int not null, name varchar(50) not null)

И по моемуenumHolder стол, который я хочу иметьmyEnumCode поле, которое указывает на таблицу myEnums.

Использование currentlty поддерживается как EnumType.ORDINAL, так и EnumType.STRING. Я полагаю, это не очень хорошая идея.

И еще один вопрос. Как я могу заполнитьmyEnums таблица с использованием JavaMyEnum данные класса? Как бы вы это сделали? Лучший подход, пожалуйста.

PS: вот решения, которые я могу предложить:

Давайте предположим, что есть таблицаmyEnum с участиемcode и имяfields, ЯваMyEnum enum, что описано в вопросе.enumHolder стол надо иметьmyEnumCode ссылка наmyEnum.code поле. Пожалуйста, прокомментируйте решение, если вы не согласны.

@Entity
@Access(AccessType.FIELD)
public class EnumHolder {
    @Id private int id;
    @Transient private MyEnum myEnum;
    …
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public MyEnum getMyEnum() { return MyEnum; }
    public void setMyEnum(MyEnum myEnum) { this.myEnum = myEnum; }

    @Access(AccessType.PROPERTY) @Column(name="myEnumCode")
    protected int getMyEnumForDb() {
        return myEnum.getCode();
    }

    protected void setMyEnumForDb(int enumCode) {
        myEnum = MyEnum.getByCode( enumCode);
    }
…
}

Конечно, здесь есть недостатки. Но на данный момент я не вижу лучшего подхода. Альтернативы с EnumType.ORDINAL и EnumType.STRING, пожалуйста, не предлагайте. Я не хочу писать здесь все проблемы, которые могут существовать с его использованием (в Эффективной Java это описано относительно использования ординалов). Использование EnumType.STRING мне тоже не нравится, потому что он не позволяет иметь описание в базе данных и запрашивать его у db.

По поводу базы данных fillind. Я думаю, что это не сложно написать сценарий, который очищаетmyEnum таблица, а затем для каждого перечисления Java делает вставку в таблицу. И всегда делайте это на этапе развертывания.

Ответы на вопрос(3)

Ваш ответ на вопрос