Ilkar
Ilkar

Reputation: 2187

Insert many rows JPA Spring Boot Mysql

i want to insert many rows to this same table in mysql and have error:

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction

The code is:

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);

Service is:

public WpPostmeta saveOrUpdate(WpPostmeta wpPostmeta){

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


}

And Interface is:

public interface WpPostmetaRepository extends JpaRepository {

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

How should i insert many rows one by one to this same table?

Upvotes: 0

Views: 260

Answers (1)

MyTwoCents
MyTwoCents

Reputation: 7622

This code is updating same record. Its just a single row

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);

If you want multiple rows it would be like this

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);

Instead you can use saveAll method something like this

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;
}

Upvotes: 1

Related Questions