SpringData / Hibernate:按字段

时间:2016-03-15 15:32:44

标签: java hibernate sorting enums spring-data

使用springdata / hibernate自定义规则排序枚举时遇到小问题。

A有一个名为let的说法:DeviceState,它有自己的优先级字段。

public enum DeviceState {
    ON(4), OFF(3), UPDATE(2), CRITICAL(0), WARNING(1);
    private final int priority;

    private DeviceState(int priority) {
        this.priority = priority;
    }

    public int getPriority() {
        return priority;
    }
}

枚举由DeviceEntity使用:

@Entity
public class Device implements Serializable {

    // .... other fields

    @Enumerated(EnumType.STRING)
    private DeviceState state;

    // ....
}

我使用SpringData / Repository从数据库中获取实体,我使用了org.springframework.data.repository.Respository类中的findAll(规范,可分页)方法。

Page<Device> pagedDevices = deviceRepository.findAll(DeviceSpecifications.findByFilter(filter), pageable);

如果我的请求中包含sort = state,那么它将返回按状态排序的设备 - 按字母顺序排列,但我想使用优先级字段作为排序标准。

我尝试了什么: 将@Enumerated(STRING)更改为@Enumerated(ORIDINAL) - 但这不可能发生这是带有现有数据的生产工作系统,有几个设备正在由外部系统使用,我的项目需要String值。

Control sort order of Hibernate EnumType.STRING properties但我无法添加任何新列,因为我已经拥有生产数据,所有枚举值都保存为String。

我还尝试了一些包含Page结果的“变通方法” - 但这些只是解决方法而不是纯粹的解决方案:)

有任何线索,有帮助吗?理念? 请记住,这是生产工作系统,我不能做任何“烟火”。

1 个答案:

答案 0 :(得分:1)

>>> 'unicode'
'unicode'