首页 > 解决方案 > saveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用

问题描述

我的程序中有 for 循环,我将新对象保存到数据库中。看起来像

for (String value: readvalue.readValue()) {
            Value value= getValueForSomething(something);
            System.out.println(value);
            valueRepository.save(value);
        }

这段代码每 30 秒执行一次,并将所有值保存到数据库中。数据库中的某些值具有两个相同的字段和另一个。如何更新 h2 数据库中的值而不是插入新值?

标签: javahibernatespring-bootspring-datah2

解决方案


我建议在您的 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 ";

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


推荐阅读