插入多行JPA Spring Boot Mysql
我想在mysql中向同一个表插入许多行,但出现错误: org.hibernate.StaleObjectStateException:行被另一个事务更新或删除 代码是:插入多行JPA Spring Boot Mysql,mysql,spring,hibernate,jpa,Mysql,Spring,Hibernate,Jpa,我想在mysql中向同一个表插入许多行,但出现错误: org.hibernate.StaleObjectStateException:行被另一个事务更新或删除 代码是: WpPostmeta wpPostmeta = new WpPostmeta(); wpPostmeta.setPostId(wpPosts.getId()); wpPostmeta.setMetaKey("_sku"); wpPostmeta.setMetaValue(""); wpPostmetaService.saveO
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;
}
接口为:
公共接口WPPostaRepository扩展了JpaRepository{
@Query(value = "Select * from wp_postmeta where post_id = ?1", nativeQuery = true){}
如何将多行逐个插入到同一个表中?此代码正在更新同一条记录。它只是一行
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);
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;
}
相反,您可以使用像这样的saveAll方法
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);
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;
}
List lstrock=new ArrayList();
wppestta wppestta=新wppestta();
wppostETA.setPostId(wpPosts.getId());
wpPostmeta.setMetaKey(“sku”);
wpPostmeta.setMetaValue(“”);
lstRecord.add(wpPostmeta);
wpPosteTa wpPosteTa1=新的wpPosteTa();
wpPostmeta1.setPostId(wpPosts.getId());
wpPostmeta1.setMetaKey(“常规价格”);
wpPostmeta1.setMetaValue(reqularPrice[0]);
lstRecord.add(wpPostmeta1);
保存所有(记录);
公共布尔值saveAll(列表数据){
wppertarepository.saveAll(lstData);
返回true;
}
关于会话,您应该使用saveAll
操作,而不是在批量使用时刷新每个保存操作。我正在尝试使用ArrayList,但我有一个错误:具有相同标识符值的不同对象已与会话相关联。我想问题出在此行wppostETA.setPostId(wpPosts.getId());…您是否正在尝试添加新数据或更新记录