ArrayList中保存了10多个项目,未按顺序排列到DB

时间:2019-04-25 13:19:16

标签: java hibernate jpa arraylist

我收到List<MyDto> dtos和14 MyDto,并尝试将其保存到数据库。

  1. 我收到List<MyDto>

  2. 循环dtos并在每个步骤上

    2.1->将MyDto映射到MyEntity

    2.2)->保存MyEntity并将其刷新到DB

我希望数据库中有14行,按我保存的顺序保存。例如:

row0
row1
row2
row3
row4
row5
row6
row7
row8
row9
row10
row11
row12
row13

它在使用PostgreSQL和Oracle的所有应用程序实例上都能正常工作。

但是在一个与Oracle兼容的实例上,我有奇怪的行为。有时,顺序被破坏了。我不明白为什么?所有行都保存有偏移量。

如果我保存上面的示例,我会得到:

row4
row5
row6
row7
row8
row9
row10
row11
row12
row13
row0
row1
row2
row3

我认为ArrayList中的问题。它有DEFAULT_CAPACITY = 10,如果我添加14个项目-它会更改CAPACITY并重新排序项目。但是我不明白下一个:

  1. 为什么有时会发生这种情况,而在其他计算机上却不会发生?
  2. 我该如何解决?

2 个答案:

答案 0 :(得分:0)

这可能是由于Oracle用于操作的线程池。尝试在插入内容之间添加一个停顿,看看是否是您遇到的问题。

作为长期解决方案,如果您打算扩展规模,则可能不希望直接依赖插入顺序来进行记录排序。您可能应该使用序列ID或对象创建日期或其他方式在select上对记录进行排序。

答案 1 :(得分:0)

您可以使用JPA中的 @OrderBy 批注(在要排序的属性顶部)来按所需顺序获取列表。

有关更多信息,请检查此链接jpa/OrderBy