Вставить много строк JPA Spring Boot Mysql - PullRequest
0 голосов
/ 20 сентября 2018

я хочу вставить много строк в эту же таблицу в mysql и иметь ошибку:

org.hibernate.StaleObjectStateException: строка была обновлена ​​или удалена другой транзакцией

Код:

WpPostmeta wpPostmeta = new WpPostmeta();
wpPostmeta.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey("_sku");
wpPostmeta.setMetaValue("");

wpPostmetaService.saveOrUpdate(wpPostmeta);

wpPostmeta.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey("_regular_price");
wpPostmeta.setMetaValue(reqularPrice[0]);

wpPostmetaService.saveOrUpdate(wpPostmeta);

Служба:

public WpPostmeta saveOrUpdate(WpPostmeta wpPostmeta){

    wpPostmetaRepository.save(wpPostmeta);
    wpPostmetaRepository.flush();
    return wpPostmeta;


}

И интерфейс:

открытый интерфейс WpPostmetaRepository расширяет JpaRepository {

@Query(value = "Select * from wp_postmeta where post_id = ?1", nativeQuery = true){}

Как мне вставить одну и ту же строку по одной в одну и ту же таблицу?

1 Ответ

0 голосов
/ 20 сентября 2018

Этот код обновляет ту же запись.Это всего лишь одна строка

WpPostmeta wpPostmeta = new WpPostmeta();
wpPostmeta.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey("_sku");
wpPostmeta.setMetaValue("");

wpPostmetaService.saveOrUpdate(wpPostmeta);

wpPostmeta.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey("_regular_price");
wpPostmeta.setMetaValue(reqularPrice[0]);

wpPostmetaService.saveOrUpdate(wpPostmeta);

Если вам нужно несколько строк, это будет выглядеть так:

WpPostmeta wpPostmeta = new WpPostmeta();
wpPostmeta.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey("_sku");
wpPostmeta.setMetaValue("");

wpPostmetaService.saveOrUpdate(wpPostmeta);

WpPostmeta wpPostmeta1 = new WpPostmeta();
wpPostmeta1.setPostId(wpPosts.getId());
wpPostmeta1.setMetaKey("_regular_price");
wpPostmeta1.setMetaValue(reqularPrice[0]);

wpPostmetaService.saveOrUpdate(wpPostmeta1);

Вместо этого вы можете использовать метод saveAll примерно так:

List<WpPostmeta> lstRecord = new ArrayList<WpPostmeta>();

WpPostmeta wpPostmeta = new WpPostmeta();
wpPostmeta.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey("_sku");
wpPostmeta.setMetaValue("");
lstRecord.add(wpPostmeta);


WpPostmeta wpPostmeta1 = new WpPostmeta();
wpPostmeta1.setPostId(wpPosts.getId());
wpPostmeta1.setMetaKey("_regular_price");
wpPostmeta1.setMetaValue(reqularPrice[0]);
lstRecord.add(wpPostmeta1);


saveAll(lstRecord);


public Boolean saveAll(List<WpPostmeta> lstData){
    wpPostmetaRepository.saveAll(lstData);
    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...