java - saveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用
问题描述
我的程序中有 for 循环,我将新对象保存到数据库中。看起来像
for (String value: readvalue.readValue()) {
Value value= getValueForSomething(something);
System.out.println(value);
valueRepository.save(value);
}
这段代码每 30 秒执行一次,并将所有值保存到数据库中。数据库中的某些值具有两个相同的字段和另一个。如何更新 h2 数据库中的值而不是插入新值?
解决方案
我建议在您的 for 循环中创建一个方法,通过使用唯一标识符(如 id)查询对象来检查对象是否已存在于您的 H2 DB 中。使用以下示例 RDB 查询作为参考:
private static final String PRODUCT_ALREADY_EXISTS_QUERY = "SELECT EXISTS(SELECT 1"
+ " FROM inventory.products "
+ " WHERE 1 = 1"
+ " AND id = :id)";
然后,如果记录确实存在,则调用一个更新方法,该方法利用一个查询来使用唯一标识符进行更新。一个 RDB 示例查询将是:
private static final String UPDATE_QUERY = "UPDATE inventory.products"
+ " SET (company_id, name, price, type, quantity, created_date, last_modified_date) = "
+ " (:companyId, :productName, :price, :productType, :quantity, :createdDate, :lastModifiedDateTime)"
+ " WHERE id = :id ";
如果记录不存在,那么只需像您一样创建记录。
推荐阅读
- c - Minifilter蓝屏崩溃
- material-ui - 有没有办法使用 Material-UI Chip 组件以列式布局显示两位数据?
- php - PHP练习最便宜的航班
- json - 如何在 Swift 中为 POST JSON 解析创建函数
- android - 如何“监听”布尔值的变化
- react-native - 重定向链接不正确(在 expo 应用程序中发现身份验证)
- rabbitmq - 为什么要用rabbitMQ代替ocelot api gateway
- powershell - 使用powershell将文本文件数据转换为excel
- java - 如何将 HtmlLink 上传到 Android WebView
- c++ - 无法识别文件“Lenna.jpg”的格式。在抛出 'cimg_library::CImgIOException' 的实例后调用终止