Java Spring(LinkedHash)映射中的枚举键未排序
我的实体Mealplan
有一个mealsPerWeek
属性作为LinkedHashMap
@Entity
public class Mealplan {
@Id
private int id;
@ManyToMany
private Map<Weekday, Meal> mealsPerWeek = new LinkedHashMap<>();
public Map<Weekday, Meal> getMealsPerWeek() {
return mealsPerWeek;
}
}
map属性的键是Weekday
,是一个枚举:
public enum Wochentag {
Monday, Tuesday, Wednesday, Thursday, Friday
}
现在,我希望在我的API中,餐食按照枚举的正确顺序显示。但它的显示非常随机:
{
id: 1,
mealsPerWeek: {
Tuesday: {
id: 3,
name: "Salad",
preis: 3,
art: "vegan"
},
Monday: {
id: 4,
name: "Linsensuppe",
preis: 23.5,
art: "vegan"
},
如何在REST API中对其进行排序,使其以正确的顺序显示密钥
编辑:每次启动应用程序时,我都通过data.sql
插入对象,并意识到每次顺序都不同
# 1 楼答案
问题是,当从数据库加载映射(通常是所有集合)时,hibernate使用自己的集合类型
https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/domain/collections.html
因此:
将被PersistentMap替换。 这就是为什么使用EnumMap或TreeMap初始化映射失败的原因
您希望Hibernate使用PersistentSortedMap,为此
SortedMap
@SortNatural
或@SortComparator
# 2 楼答案
EnumMap可能会对你有所帮助。迭代顺序基于枚举中声明的顺序https://docs.oracle.com/javase/7/docs/api/java/util/EnumMap.html