mysql - 插入多行 JPA Spring Boot Mysql
问题描述
我想在 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){}
我应该如何将许多行一一插入到同一张表中?
解决方案
此代码正在更新相同的记录。它只是一行
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;
}
推荐阅读
- python - Python Vlookup to return one value only - similar to excel
- python - Python 3: Using subprocess to take photo via gphoto2 but can't set custom filename doing it.
- c# - 如何阻止语言翻译 Api 在机器人框架中翻译表单流输入
- ios - 如何在不点击按钮的情况下调用 UIButton 操作方法?
- c# - 桌面应用程序图标上的屏蔽图像
- xml - 传递 XML 时提供的 XML 格式不正确
- mysql - 我的 SQL 安装在 `Program Files` 中,但看不到 `my.ini` 文件
- javascript - 在 Javascript 中使用 Set 删除重复项
- objective-c - 图像在 UITableView 中重叠如何解决这个问题?
- groovy - 如何在 groovy xmlslurper 中检查标签是否包含值或子标签?