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

Java Hibernate./JPA本机大容量插入,具有重复密钥更新问题,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我已经使用这个函数通过insert或update生成MySQL 5.7的批量插入 private String bulkInsertQuery(List<ProducDetails> productDetailsList){ StringBuilder prodBatchInsert=new StringBuilder("INSERT INTO product_details(prod_id, prod) VALUES "); StringBuil

我已经使用这个函数通过insert或update生成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();
私有字符串bulkInsertQuery(列表productDetailsList){
StringBuilder prodBatchInsert=新的StringBuilder(“插入产品详细信息(产品id,产品)值”);
StringBuilder prodBatchInsertOnDuplicateKey=新StringBuilder(“在重复键上更新prod=值(prod)”);
productDetailsList.forEach((ProductDetails行)->{
prodBatchInsert.append(“”);
prodBatchInsert.append(“\”+行.getProdId()+“\”);
prodBatchInsert.append(“,”);
prodBatchInsert.append(“\”+行.getProd()+“\”);
prodBatchInsert.append(“)”;
prodBatchInsert.append(“,”);
});
String insertSql=prodBatchInsert.toString();
返回insertSql.substring(0,insertSql.length()-1).concat(prodBatchInsertOnDuplicateKey.toString());
}
Query Query=entityManager.createQuery(bulkInsertQuery(productDetailsList));
query.executeUpdate();
最初,我使用单引号,但由于这种类型的数据产品名称(如ABC'S FOOD)包含单引号,所以失败了,然后我切换到上面的双引号

我想知道是否有办法解决这个问题,或者使用参数化查询来批量插入更新重复密钥


为此,您可以使用
@SQLInsert
来使用批插入。请参见

Hibernate不支持批量插入。请看这里是的,但我也希望重复密钥更新…它不起作用检查另一个堆栈溢出帖子中的示例:)我现在遇到了这个问题javax.persistence.EntityExistsException:具有相同标识符值的不同对象已与会话相关联为什么要尝试持久化相同的对象多次使用相同的持久性上下文?在运行此进程之前,请先尝试消除重复列表。