Управлять порядком сортировки свойств Hibernate EnumType.STRING

В настоящее время мой проект использует @Enumerated (EnumType.ORDINAL) , поэтому, когда я сортирую по этому столбцу, он упорядочивается по порядку в перечисление , которое работает нормально. Но мне нужно добавить некоторые дополнительные значения в перечисление , которые должны быть вставлены в разные места в списке значений перечисления и не могут быть просто добавлены внизу, чтобы поддерживать правильный порядок сортировки.

Если я сделаю это, моя база данных будет испорчена. Мне придется написать несколько сценариев, чтобы перевести все эти порядковые значения в правильный новый порядковый номер. Существует вероятность того, что статус будет добавлен позже. Поскольку мне нужно исправить все данные в базе данных, я бы хотел сделать это только один раз, так как это будет большая задача.

Так что я Я думаю о переключении на EnumType.STRING , чтобы больше не приходилось переназначать порядковые значения в базе данных. Но если я делаю это, то как мне правильно сортировать? Алфавитный порядок строк enum не тот, который мне нужен.

Используя приведенные ниже классы, когда я сортирую по свойству «status», результаты получаются в следующем порядке:

hql = "from Project order by status"

Development
Planning
Production

Я бы хотел, чтобы они пришли в этом порядке, без использования EnumType.ORDINAL :

Planning
Development
Production

Это возможно без создания таблицы для перечисления или добавления дополнительного столбца в проект класс? Я пробовал это, но выдает исключение:

hql = "from Project order by status.sort"

Перечисление:

public enum Status {

    PLANNING("Planning", 0),
    DEVELOPMENT("Development", 1),
    PRODUCTION("Production", 2);

    private final String name;
    private final int sort;
    private Status(String name, int sort) {
        this.name = name;
        this.sort = sort;
    }
    @Override
    public String toString() {
        return name;
    }
}

Сущность:

@Entity
public class Project {
    private Long id;
    private Status status;

    @Id
    @GeneratedValue
    public Long getId() {
        return this.id;
    }
    private void setId(Long id) {
        this.id = id;
    }
    @Enumerated(EnumType.STRING)
    public Status getStatus() {
        return status;
    }
    public void setStatus(Status status) {
        this.status = status;
    }
}
6
задан Pascal Thivent 31 August 2010 в 03:48
поделиться