【发布时间】:2021-03-18 04:28:44
【问题描述】:
我已使用此函数通过插入或更新生成对 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)包含单引号而失败,然后我切换到上面的双引号
我想知道是否有办法解决这个问题或使用参数化查询批量插入更新重复键。
【问题讨论】:
-
Hibernate 支持批量插入。请看这里baeldung.com/jpa-hibernate-batch-insert-update
-
是的,但我也想进行重复的密钥更新……这样不行