我发现,那个方法
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/