是否可以将JPA中的字母排序改为自定义?
我在division
列中有这个数据:
BRONZE
SILVER
GOLD
DIAMOND
我把它Map到一个实体字段:
public enum Division {
BRONZE,
SILVER,
GOLD,
DIAMOND
}
@Entity
public class MyEntity {
@Enumerated(EnumType.STRING)
private Division division;
...
}
如果我使用默认排序,我会得到一个字母顺序:
- [*] B & b Bungalow
*DIAMOND
*G旧
*SILVER
但我想有矿石的质量排序(在枚举的顺序)。
3条答案
按热度按时间3phpmpom1#
排序(或排序)发生在数据库级别。所以不可能定义一个自定义的
Comparator
或类似的-如果这是你的意图。相反,数据库将需要知道 * 质量 * 以某种方式使用它作为顺序标准。一个选项是按枚举的序号排序。这是唯一可能的,如果你把它存储在数据库中-而不是名称:
第二个选项是将
enum
转换为Entity
,并显式地将质量存储为新的整数字段。这样做的缺点是,你不能再使用常量值。第三个选项是
Formula
字段,具有显式的 name到quality Map(您也可以按公式字段排序):这是最慢的选择-如果你的表中有很多行。
hc2pp10m2#
你可以做一个像这样的自定义查询,根据需要对枚举进行排序:
6ovsh4lw3#
我对枚举值使用如下顺序:
然后使用CriteriaBuilder.Case对结果进行排序: