【问题标题】:saveOrUpdate doesn't work in Spring Data with H2 databasesaveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用
【发布时间】: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 数据库中的值而不是插入新值?

【问题讨论】:

    标签: java hibernate spring-boot spring-data 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 ";
    

    如果记录不存在,那么只需像您一样创建记录。

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 1970-01-01
      • 2017-02-20
      • 2013-08-04
      • 2014-05-15
      • 2019-03-31
      • 2020-12-10
      • 2019-09-06
      • 2014-02-28
      相关资源
      最近更新 更多