【发布时间】:2012-09-30 23:47:21
【问题描述】:
我希望有人可以帮助我解决我的休眠问题,因为我已经在 Google 上敲了大约一个小时,但没有任何结果。
所以问题是我在一个类中有一个 SortedMap,使用 Integer 作为键(及其自然的内置 compareTo 方法)和另一个类作为值类型。我正在使用密钥来保持值类型的用户定义顺序,并试图让 Hibernate 坚持这一点。
无论出于何种原因,Hibernate 默认忽略我输入的键,而是使用值类型的主键作为键。当我从数据库中加载我的地图时,我的所有键都以这种方式更改。
Map的定义如下图(我用的是注解式的Hibernate);
@ManyToMany(cascade = CascadeType.ALL)
@MapKey
@Sort(type = SortType.NATURAL)
private SortedMap<Integer, Column> columnOrder;
我不能使用 Column 类型来存储订单本身,因为 Column 可以在包含类型的许多实例中使用,每次使用不同的键值。任何指导将不胜感激。
【问题讨论】:
-
与您的问题没有直接关系,但我想知道您为什么不只使用
Column的列表?我们有一个类似的用例,最后用一个列表做得更好。 -
我可能弄错了,但是用户在任何时候都可以更改顺序,并且使用列表,我认为 hibernate 不会坚持排序的更改。 SortedMap 通过其内部实现确保正确排序。
-
我只是不想在我们的用例中维护排序映射中的键的任务成为一场噩梦。如果您从一系列连续的键
1..n开始并只进行一次更改(切换、添加、删除),则您必须在自己的代码中触摸该映射中的O(n)元素。如果您使用的是列表,则列表会处理它。
标签: java hibernate jpa map key