当前位置: 首页 > 知识库问答 >
问题:

Hibernate./JPA 本机大容量插入,具有重复的密钥更新问题

长孙阳泽
2023-03-14

我使用此函数生成批量插入MySQL 5.7与插入或更新

private String bulkInsertQuery(List<ProducDetails> productDetailsList){
    StringBuilder prodBatchInsert=new StringBuilder("INSERT INTO product_details(prod_id, prod) VALUES ");
    StringBuilder prodBatchInsertOnDuplicateKey=new StringBuilder(" ON DUPLICATE KEY UPDATE prod=VALUES(prod)");
    productDetailsList.forEach((ProductDetails row)->{
        prodBatchInsert.append("(");
        prodBatchInsert.append("\""+row.getProdId()+"\"");
        prodBatchInsert.append(",");
        prodBatchInsert.append("\""+row.getProd()+"\"");
        prodBatchInsert.append(")");
        prodBatchInsert.append(",");
    });
    String insertSql=prodBatchInsert.toString();
    return insertSql.substring(0,insertSql.length()-1).concat(prodBatchInsertOnDuplicateKey.toString());
}

Query query=entityManager.createQuery(bulkInsertQuery(productDetailsList));
            query.executeUpdate();

最初,我使用单引号,但由于这种类型的数据产品名称(如ABC'S FOOD)包含单引号而失败,然后我切换到上面的双引号

我想知道是否有办法解决此问题或使用参数化查询在更新重复键上大容量插入。

共有1个答案

佴淮晨
2023-03-14

为此,可以使用@SQLInsert来使用批插入。请参阅Hibernate事务和使用attachDirty(保存或更新)的并发

 类似资料:
  • 好的,这个问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入的行的id,但如果没有插入行,我希望得到一个零。问题如下: I INSERT...UPDATE一些记录:由于行是新插入的,因此返回所有ID 然后重复这个过程:这一次不返回ID。耶!这正是我想要的 我更改了一个列值并重复该过程:但现在返回了我更改了列值的行的ID。这让我很生气

  • 问题内容: 我到处搜寻,但是没有找到可能。 我有这个MySQL查询: 字段ID具有“唯一索引”,因此不能有两个。现在,如果数据库中已经存在相同的ID,我想对其进行更新。但是我真的必须再次指定所有这些字段,例如: 要么: 我已经在插入中指定了所有内容… 需要特别说明的是,我想使用变通方法来获取ID! 我希望有人能告诉我最有效的方法是什么。 问题答案: 没有其他方法,我必须两次指定所有内容。首先是插入

  • 我的例子如下: Person是一个简单的实体,有3个字段“Long id、String name、intger age”,并且映射到相应的Person表,上面有3列) 有没有办法通过使用@Query 重要的 请帮帮忙。

  • 问题内容: 我没有看到重复的约束。它在哪里? 问题答案: 这很可能是因为您至少命名了一个约束,且其标识符与列相同: 应该为约束使用其他标识符,例如: 和表中的相同: 这些是我看到的仅有的三个,但可能还有其他我想念的。

  • 用户详细信息 有人能看出我做错了什么吗?

  • 问题内容: 在SQLAlchemy中有一种优雅的方法吗?我的意思是语法类似于? 问题答案: 现在,仅在MySQL的SQLAlchemy中内置了此功能。somada141的以下答案是最佳解决方案:https ://stackoverflow.com/a/48373874/319066 在SQL语句中 如果希望生成的SQL实际上包含,则最简单的方法涉及使用装饰器。 的代码(来自关于该主题的很好的螺纹连