Spring boot - Jpa - SaveAll (Entity <S>) отсутствующие объекты в базе данных

У меня возникает проблема, когда я пытаюсь сохранить список из 21 300 объектов, однако в базе данных сохраняется только [ВЫБРАТЬ COUNT (id) =] 10 506.

Вывод на консоль показывает, что размер списка, готового к сохранению, правильный, поэтому код «правильный». Если я сделаю цикл только один раз, например, с freq == 30, это будет работать нормально, поэтому кажется, что он каким-то образом связан с циклом for каждый, когда он повторяется несколько раз. Пропавшие без вести лица несколько рассредоточены по населению.

Есть идеи, почему именно такое поведение?

public void loadTickAll(int conid) {
    System.out.println(">>>> MERGING <<<<<< Querying ticks for " + conid);
    List<CandleTick> candlesHisto = histoCandleTickRepo.findByConidAll(conid, LocalDate.parse("2016-11-01"));
    List<CandleTick> candlesLive = new ArrayList<>();

    List<CandleTick> candles = Stream.of(candlesHisto, candlesLive).flatMap(Collection::stream)
            .collect(Collectors.toList());

     freqList.forEach((freq) -> {
     if (freq>=30) {
     System.out.println("Working on freq " + freq);

     FlowMerger flowMerger = new FlowMerger(freq, contracts.get(conid));
     List<CandleMerge> flow = flowMerger.createFlow(new ArrayList<>(candles));
     Collections.reverse(flow);

     System.out.println("Start saving " + freq + " - " + flow.size());
     histoCandleMergeRepo.saveAll(flow);

     System.out.println(freq + "/" + conid + " has been delivered and saved");
     }
     });

}

Консольный вывод

>>>> MERGING <<<<<< Querying ticks for 5 Working on freq 30 Start saving 30 - 21300 30/5 has been delivered and saved

application.properties

# jdbc.X
jdbc.driverClassName=org.postgresql.Driver

histo.jdbc.url=jdbc:postgresql://localhost:5432/trading2018
live.jdbc.url=jdbc:postgresql://localhost:5433/trading2018

jdbc.user=...
jdbc.pass=...


## hibernate.X
hibernate.default_schema=trading
hibernate.jdbc.lob.non_contextual_creation=true
hibernate.show_sql=false
hibernate.temp.use_jdbc_metadata_defaults=false
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto=validate
#hibernate.cache.use_second_level_cache=false
#hibernate.cache.use_query_cache=false

logging.level.org.springframework.web=ERROR
logging.level.com=DEBUG
logging.file=C:/tmp/application.log
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 684
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось отследить проблему. Я показал SQL и заметил, что обновляю, а не вставляю.

В моей сущности отсутствовали некоторые аннотации ...

@GeneratedValue(generator = "merge_id_seq")
@SequenceGenerator(name = "candleid_generator_generator", sequenceName = "merge_id_seq", initialValue = 1)
@Id
private int id;

Если это помогло решить ваш вопрос, примите ответ, нажав на звездочку

bohemian 17.12.2018 11:06

Другие вопросы по теме