java - 强制 Hibernate 或一般 JPA 供应商使用具有多个值的 INSERT INTO?

标签 java hibernate sqlite jpa spring-data

我发现,那个方法

Iterable<S> CrudRepository#save(Iterable<S> entities)

工作很慢。

如果相反,我自己采用 Iterable 并创建这样的长查询

INSERT INTO mytable (field1, field2) VALUES
(value1, value2),
(value3, value4),
...
(valueN, valueM);

并针对实体管理器执行它,它运行得更快(10 倍或更多)。

我能让 Spring-Data 本身同样快速地工作吗?

例如,是否有任何选项可以强制 Hibernate 或任何底层库使用此类多值查询?

我正在使用 SQLite 和来自这里的类:https://stackoverflow.com/a/24233241/258483

也许我可以以某种方式改进这门课?

更新

我正在使用身份生成

@Entity
@Table(name = "variable_values")
public class VariableValue {

   @Id
   @Column(name="id")
   @GeneratedValue(generator="sqlite")
   @TableGenerator(name="sqlite", table="sqlite_sequence",
      pkColumnName="name", valueColumnName="seq",
      pkColumnValue="variable_values")
   @Getter
   @Setter
   private long id;

这是否意味着我无法从批处理中获益?

最佳答案

您必须指定 hibernate.jdbc.batch_size 选项才能启用插入语句的自动批处理。 Here是此选项和相关选项的更多详细信息。

但是,您还必须验证是否已正确完成所有操作以在 SQLite 方言的自定义实现中支持它。

关于java - 强制 Hibernate 或一般 JPA 供应商使用具有多个值的 INSERT INTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43666358/

相关文章:

java - Hibernate:仅在不存在时创建数据库

sql - 插入记录时sqlite表列的默认值

angular - angular4 Electron 桌面应用中的sqlite3

JavaFX Swing 浏览器非常慢

java - 可以使用单个命令在 Eclipse 中重命名多个 Java 包吗?

java - Python 代码中的 Java 排序算法

java - 运行时在项目中找不到主类 - Java Netbeans

java - 在 Spring MVC 应用程序中正确使用 getHibernateTemplate() 吗?

java - Hibernate 继承 - 获取父类(super class)实例并转换为子类

sql - 如何回退到sqlite WHERE子句中的辅助搜索条件?