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

Spring data jpa,如何编写在同一表中插入多条记录的自定义查询?

白学
2023-03-14

下面是我的表模式

CREATE TABLE Animals (

     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) ENGINE=MyISAM;

在mysql中,我可以在一个插入sql查询中直接插入多条记录。如下所示。

INSERT INTO animals (name) VALUES('dog'),('cat'),('penguin'),('lax'),('whale'),('ostrich');

然而,我如何在spring data jpa中实现同样的效果呢。

现在我正在使用CrudRepository的Iterable save(Iterable entities);我有6条插入语句

insert into Animals (name) values (?)

insert into Animals (name) values (?)

insert into Animals (name) values (?)

insert into Animals (name) values (?)

insert into Animals (name) values (?)

insert into Animals (name) values (?)

如何限制为一个插入查询?任何答案都将对Spring data jpa、hql或jpql有所帮助。

共有1个答案

丌官向荣
2023-03-14

假设您正在使用hibernate,您需要调整几个设置。您需要通过在hibernate.jdbc.batch属性中放置一个值来启用批处理。但是,这可能不会减少它,因为根据不同语句的数量,您还可能需要对它们进行排序才能批处理它们。为此,您需要将hibernate.order_insertshibernate.order_updates设置为true

如果您使用版本或时间戳来限制并发修改,则可能还需要启用Hibernate。jdbc。batch\u versioned\u数据

总之,您可能需要在配置或持久性中添加类似的内容。xml

properties.put("hibernate.jdbc.batch_size", "25");
properties.put("hibernate.order_inserts", "true");
properties.put("hibernate.order_updates", "true");
properties.put("hibernate.jdbc.batch_versioned_data", "true");

在这里可以找到一篇解释更多内容的博客文章。

然而,如果您正在使用MySQL,它甚至可能还不起作用,因为MySQL需要在数据源上进行额外设置才能启用JDBC的addBatch。您需要将reWriteBatchedMonts设置为true才能为MySQL启用此功能。根据您的数据源,您可以将其添加到连接字符串或作为单独的属性。

 类似资料:
  • 如本文所示,此功能在MySQL中可用,根据Sybase文档,它也应该得到支持,但是Sybase没有提供工作示例,因此您必须解释以下内容: 语法1使用指定的表达式列值插入单行或多行。如果指定,多行由附加括号分隔 因此,我将“附加括号”解释为期望下面的代码能够工作 然而,它错误地 我使用的是Sybase ASE 15,在INSERT语句的支持页面上看不到任何关于插入多行的引用 这个功能在赛贝斯可用吗?

  • 本文向大家介绍MyBatis 如何编写一个自定义插件?相关面试题,主要包含被问及MyBatis 如何编写一个自定义插件?时的应答技巧和注意事项,需要的朋友参考一下 自定义插件实现原理: MyBatis 自定义插件针对 MyBatis 四大对象(Executor、StatementHandler、ParameterHandler、ResultSetHandler)进行拦截: Executor:拦截内

  • 我有两个表,我想写一个多重插入查询,这样,第一个表的PK是自动插入作为fk在另一个表。 让我们假设以下表模式: Tblchild 现在我想编写一个多插入查询,如下所示 但我不知道怎么做。我有数百万条记录要插入这些表中。并且我不想在第一个表中插入一条记录,然后在第二个表中提取父id并插入记录。

  • 有时,XPath在...作为单独的文件下对我来说不起作用。所以决定这样做。我怎么才能做到这一点,任何建议...

  • 另外,如何对模板执行n1QL查询?我知道有一个方法,但我没有找到任何关于它的好文档。有人能解释一下这个怎么用吗?

  • 问题内容: 我正在努力编写一个HQL查询以在表中插入新记录。我已经看到了一些插入查询,如下所示,但我不想从下面的代码插入另一个表中的数据。 例如,我有一个表“ User”,其中有三个字段,例如名称,年龄,数字,并且有该用户表的实体。插入查询将是什么? 问题答案: 在HQL中,仅支持INSERT INTO…SELECT…。没有INSERT INTO…VALUES。HQL仅支持从另一个表插入。 因此可