Сохранение EnumSet в Postgresql с Hibernate

1

Эффективная Java, пункт 32, состояния. Используйте EnumSet вместо битовых полей. Я также нашел этот хороший учебник по этой теме. Эта книга существует некоторое время, так почему бы мне не найти какие-либо сообщения о том, как сохранить EnumSet с Hibernate? Ну, я на самом деле нашел это, а другой, но они оба довольно старые, указывают на то же самое и гораздо более старое решение, которое, к сожалению, не помогло мне, возможно, из-за моего отсутствия более глубоких спящих знаний? Вот резюме моего кода:

public class MyThing {
    public enum MyOptions {
        FLAG1, FLAG2
    }

    @Id
    private Long id;

    @Column(name = "options")
    private EnumSet<MyOptions> options;

    // [other fields, getters, setters etc]
}

Я пробовал другие аннотации, такие как

@ElementCollection

с и без (targetclass= MyOptions.class)

а также

@JoinTable(name = "my_options",
    joinColumns = @JoinColumn(name = "id"))

а также

@OneToMany
@JoinColumn(name = "options")

но не повезло.

Предпочтительно, я бы сохранил информацию в новом столбце таблицы my_thing, но я мог бы также жить с отдельной таблицей для перечислений, если это необходимо.

Теги:
hibernate
enums
enumset

1 ответ

4
Лучший ответ

Попробуй это

@ElementCollection
@CollectionTable(name = "my_options", 
        joinColumns = @JoinColumn( name = "mything_id"))
@Column(name = "option")
@Enumerated(EnumType.STRING)
private Set<MyOptions> options;

В этой конфигурации вам нужна таблица базы данных с именем my_options с option столбцов и mything_id которая предназначена MyThing таблицы MyThing.

  • 1
    Я хотел бы добавить это, когда я объявляю @Enumerated(EnumType.STRING) private EnumSet<MyOptions> regions; Я получаю org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: поэтому мне пришлось изменить свой метод get, чтобы безопасно получить экземпляр EnumSet <MyOptions>, выполнив это: public EnumSet<Region> getRegions() { `return EnumSet.copyOf (region);` `}`

Ещё вопросы

Сообщество Overcoder
Наверх
Меню