2013-08-26 57 views
2

我想存储用户定义的键值参数的LinkedHashMap。为此,我创建了一个动态的基于jQuery的html表格,允许用户创建一个新的“键值行”,删除现有的或向上或向下移动行。JPA @ElementCollection:如何保持插入顺序

现在,我可以将DOM-ids输入字段映射到我的持久化实体,即使用@ElementCollection注解的映射。不幸的是 - 在刷新页面之后 - 只要我允许用户将键值对移动到特定索引,似乎有任意的顺序是不可接受的。

这是我的JPA实体的映射成员变量:

@ElementCollection 
@CollectionTable(
     name="VCTRL_SELECTIONBOXES_VALUEMAP", 
     [email protected](name="SELECTIONBOXES_ID") 
) 
@Column(name="MAP_VALUE") 
@MapKeyColumn(name="MAP_KEY") 
private Map<String, String> valueMap = new LinkedHashMap<String, String>(); 

你有什么样的想法,如何应付呢?

+1

SQL表格没有订单 - 您必须定义它。因此,您必须对其进行排序:您可以尝试使用@OrderColumn(name =“xxx”)' – Beryllium

+0

但映射的集合表只有两列用于键和值。不想为键排序,但是要为广告订单排序... –

+0

然后添加包含创建时间戳的另一列,然后按此顺序排序。 SQL没有“插入顺序”的概念。 – Beryllium

回答

0

createTimestamp不会帮助您的订单 - 您不能上下移动行并依靠它排序。似乎你唯一的选择是创建单独的对象与整数列'顺序'并在保存之前填充它,然后在加载时按顺序排序。但它可能不适用于CollectionTable,使用标准OneToMany