Reputation: 2187
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
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