ArrayList с более чем 10 сохраненными элементами, не заказанными в БД - PullRequest
0 голосов
/ 25 апреля 2019

Я получаю List<MyDto> dtos с 14 MyDto и пытаюсь сохранить его в базе данных.

  1. Я получаю List<MyDto>

  2. цикл dtos и на каждом шаге:

    2,1 -> карта MyDto в MyEntity

    2.2) -> сохранить и сбросить MyEntity в БД

Я ожидаю 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 голосов
/ 25 апреля 2019

Вы можете использовать аннотацию @ OrderBy (в верхней части свойства для сортировки) из JPA, чтобы получить список в нужном вам порядке.

Для получения дополнительной информации перейдите по этой ссылке jpa / OrderBy

0 голосов
/ 25 апреля 2019

Это возможно из-за пула потоков, который Oracle использует для операций. Попробуйте добавить паузу между вставками, чтобы увидеть, если это ваша проблема.

В качестве долгосрочного исправления вы, вероятно, не хотите зависеть от порядка вставки напрямую для порядка записи, если планируете масштабировать. Вам, вероятно, следует использовать идентификатор последовательности или дату создания объекта или что-то еще, чтобы упорядочить свои записи при выборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...