使用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结果的“变通方法” - 但这些只是解决方法而不是纯粹的解决方案:)
有任何线索,有帮助吗?理念? 请记住,这是生产工作系统,我不能做任何“烟火”。
答案 0 :(得分:1)
>>> 'unicode'
'unicode'