当前位置: 首页 > 知识库问答 >
问题:

SpringData/Hibernate:按枚举的字段排序

马德宇
2023-03-14

我在使用SpringData/Hibernate按自定义规则对枚举进行排序时遇到了一些小问题。

A有一个名为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;

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

有线索吗,救命?点子?请记住,这是生产工作系统,我不能做任何“烟火”。

共有1个答案

冯茂实
2023-03-14
order by case 
  when state = 'CRITICAL' then 0
  when state = 'WARNING' then 1
  when state = 'UPDATE' then 2
  when state = 'OFF' then 3
  when state = 'ON' then 4
  end
 类似资料:
  • 我试图在Avro模式中创建Union字段,并用它发送相应的JSON消息,但要有一个字段-。 https://avro.apache.org/docs/1.8.2/spec.html#工会 具有相应JSON数据的最简单联合类型(avro模式)的示例是什么?(尝试制作不含NULL/空数据的示例和含NULL/空数据的示例)。

  • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这

  • 问题内容: 在DAO中具有一个其值来自Java枚举的字段通常很有用。一个典型的示例是登录DAO,您通常在其中具有一个将用户表征为“ NORMAL”或“ADMIN”的字段。在Hibernate中,我将使用以下2个对象以(半)类型安全的方式表示此关系: 这行得通,但我发现UserType类过分苛刻,并且为了存储几个值而需要太多的官僚作风。理想情况下,Hibernate应该直接支持枚举字段,并会创建一个

  • 问题内容: 在我的MySQL数据库中,有“ gender enum(’male’,’female’)”列 我创建了枚举“ com.mydomain.myapp.enums.Gender”,并在我的实体中定义了“性别”。 现在,我想将枚举类型保留在我的MySQL数据库中,但是当我启动应用程序时,我得到: 性别列在MyApp.Person中的列类型错误。找到:枚举,预期:整数 为什么是这样?这就像我用

  • 问题内容: 我想知道是否有任何方法可以为不同的类订购枚举。例如,如果我有一组固定的化学物质,它们以不同的方式与其他化学物质发生反应,有些反应强烈,有些反应微弱。我基本上希望能够根据组应该对之反应的化学物质(即取决于类别)来切换它们的排列顺序。我确实知道我应该使用Comparable,但是我不确定该怎么做。如果我不够清楚,请发表评论,我将作进一步解释。 谢谢。 所以我看起来像这样,我已经知道每种化学