我的google-fu在此失败了。我正在做一个小型数据库应用程序,它从文件中读取一些数据以及我当前存储在我的实体中的Map中的一些元数据。我厌倦了它总是以随机顺序显示。
那么我可以以某种方式使用LinkedHashMap或@OrderColumn与地图保存插入顺序吗?
@Entity
public class MooData
{
@OrderColumn
@ElementCollection
private List<BigDecimal> data;
@ElementCollection
private Map<String, String> properties;
}
答案 0 :(得分:7)
我在JPA 2.0规范中找不到@OrderColumn
注释应该适用于Map
的任何证据。引用规范:
11.1.39 OrderColumn Annotation
OrderColumn
注释指定了一个 用于维护的列 列表的持续排序。该 持久性提供者负责 维持秩序 检索和在数据库中。该 持久性提供者负责 用于更新订购 刷新到数据库来反映 任何插入,删除或重新排序 影响清单。OrderColumn
可以在a上指定注释 一对多或多对多 关系或元素 采集。OrderColumn
注释指定在 引用的关系 要订购的集合。该 订单列不可见 实体的状态或可嵌入的 类。
如果您想保留订单,请使用List
(在您的情况下为Embeddable
)。使用Map
,可以按键访问值。
答案 1 :(得分:-1)
我的google-fu指向了一些页面,他们说@OrderColumn
可以用于所有集合 - 所以听起来它不限于列表或集合。虽然到目前为止我找到的所有页面都有List
个字段的示例。
eclipse WIKI在@OrderColumn
注释上有一篇很好的文章。
修改强>
如何解决方法 - 您可以向bean添加一个方法来获取映射条目集:
public Set<Map.Entry<?,?>> getPropertiesEntries() {
Set<Map.Entry<?,?>> result = new TreeSet(myComparator);
result.addAll(map.entrySet());
return result;
}
并在遍历地图时使用此entrySet。