saveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用
Posted
技术标签:
【中文标题】saveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用【英文标题】:saveOrUpdate doesn't work in Spring Data with H2 database 【发布时间】:2019-01-25 16:10:37 【问题描述】:我的程序中有 for 循环,我将新对象保存到数据库。好像
for (String value: readvalue.readValue())
Value value= getValueForSomething(something);
System.out.println(value);
valueRepository.save(value);
这段代码每 30 秒执行一次,并将所有值保存到数据库中。数据库中的某些值具有两个相同的字段和另一个。如何更新 h2 数据库中的值而不是插入新值?
【问题讨论】:
【参考方案1】:我建议在您的 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 ";
如果记录不存在,那么只需像您一样创建记录。
【讨论】:
以上是关于saveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS 上部署带有 H2 数据库的 Spring Boot 应用程序
带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接