是否可以将 JPA 中的字母排序更改为自定义排序?
我在列中有这些数据division
:
BRONZE
SILVER
GOLD
DIAMOND
我已将其映射到实体字段:
public enum Division {
BRONZE,
SILVER,
GOLD,
DIAMOND
}
@Entity
public class MyEntity {
@Enumerated(EnumType.STRING)
private Division division;
...
}
如果我使用默认排序,我会得到字母顺序:
-
BRONZE
-
DIAMOND
-
GOLD
-
SILVER
但我想按矿石质量进行排序(按照枚举的顺序)。
排序(或排序)发生在数据库级别。所以无法定义自定义Comparator
或类似的 - 如果这是您的意图。相反,数据库需要知道quality以某种方式将其用作订单标准。
一种选择是按枚举的序数排序。只有将其存储在数据库中而不是名称中,这才有可能:
@Enumerated(EnumType.ORDINAL) // The default
private Division division;
第二个选择是要转换enum
to an Entity
并将质量显式存储为新的整数字段。这样做的缺点是,您不能再使用常量值。
第三种选择 is a Formula
具有显式字段名称到质量映射(您也可以按公式字段排序):
@Enumerated(EnumType.STRING)
private Division division;
@Formula("case division when 'BRONZE' then 0 when 'SILVER' then 1 ... end")
private int divisionQuality;
如果表中有很多行,这是最慢的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)