Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA@ElementCollection:如何保持插入顺序_Java_Jpa - Fatal编程技术网

Java JPA@ElementCollection:如何保持插入顺序

Java JPA@ElementCollection:如何保持插入顺序,java,jpa,Java,Jpa,我正在尝试存储用户定义的键值参数的LinkedHashMap。为此,我创建了一个基于动态HTMLjQuery的表,允许用户创建一个新的“键值行”,删除一个现有的键值行,或者上下移动这些行 现在,我可以将DOM ID inputfields映射到我的持久性实体,一个用@ElementCollection注释的映射。不幸的是,在刷新页面之后,似乎存在一个任意顺序,只要我允许用户将键、值对移动到特定索引,这是不可接受的 这是我的JPA实体的映射成员变量: @ElementCollection @Col

我正在尝试存储用户定义的键值参数的LinkedHashMap。为此,我创建了一个基于动态HTMLjQuery的表,允许用户创建一个新的“键值行”,删除一个现有的键值行,或者上下移动这些行

现在,我可以将DOM ID inputfields映射到我的持久性实体,一个用@ElementCollection注释的映射。不幸的是,在刷新页面之后,似乎存在一个任意顺序,只要我允许用户将键、值对移动到特定索引,这是不可接受的

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

@ElementCollection
@CollectionTable(
        name="VCTRL_SELECTIONBOXES_VALUEMAP",
        joinColumns=@JoinColumn(name="SELECTIONBOXES_ID")
)
@Column(name="MAP_VALUE")
@MapKeyColumn(name="MAP_KEY")
private Map<String, String> valueMap = new LinkedHashMap<String, String>();
@ElementCollection
@收集表(
name=“VCTRL\u选择框\u值映射”,
joinColumns=@JoinColumn(name=“SelectionBox\u ID”)
)
@列(name=“映射值”)
@MapKeyColumn(name=“MAP\u KEY”)
私有映射valueMap=newlinkedhashmap();

你有什么办法来应付吗

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

SQL表没有顺序-您必须定义它。因此,您必须对其进行排序:您可以尝试使用
@OrderColumn(name=“xxx”)
,但是用于映射的集合表只有两列用于键和值。不想为键排序,而是为插入顺序排序…然后添加另一列,其中包含创建时间戳,并按此列排序。SQL没有“插入顺序”的概念。当我刷新表时,当我将它们放入表中时,它们以正确的顺序显示。当再次将数据读入我的地图时出现问题。您的意思是一个带有默认值的空列,对吗?如果一个
LinkedHashMap
没有排序(查找
SortedMap
TreeMap
)。无论如何,我指的是表中的一列,比如
createTimestamp
,由JPA(甚至由DB使用触发器或默认值)填充。然后,如果从该表中选择,只需按
createTimestamp
排序即可。将结果放入一个适当的集合中,并进行排序(例如,由带有比较器的TreeMap支持的SortedMap)。