Java 强制Hibernate或通用JPA供应商将INSERT INTO与多个值一起使用?
我发现,这个方法,Java 强制Hibernate或通用JPA供应商将INSERT INTO与多个值一起使用?,java,hibernate,sqlite,jpa,spring-data,Java,Hibernate,Sqlite,Jpa,Spring Data,我发现,这个方法, Iterable<S> CrudRepository#save(Iterable<S> entities) 在实体管理器上执行它,它的工作速度要快得多(10倍甚至更多) 我可以让Spring数据本身以同样的速度工作吗 例如,是否有任何选项可以强制Hibernate或任何底层库使用这种多值查询 我在这里使用SQLite和类: 也许我能以某种方式提升这门课 更新 我将身份生成用于 @Entity @Table(name = "variable_value
Iterable<S> CrudRepository#save(Iterable<S> entities)
在实体管理器上执行它,它的工作速度要快得多(10倍甚至更多)
我可以让Spring数据本身以同样的速度工作吗
例如,是否有任何选项可以强制Hibernate或任何底层库使用这种多值查询
我在这里使用SQLite和类:
也许我能以某种方式提升这门课
更新
我将身份生成用于
@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\u size
选项以启用insert语句的自动批处理。有关此选项和相关选项的更多详细信息
但是,您还必须验证在SQLite方言的自定义实现中是否一切都做得很好以支持它。据说,当发生标识生成时,批处理被禁用。但这是我的情况。我不仅要生成id-s,而且要以适合Sqlite的奇怪方式来实现这一点!请参阅我的更新。如果我使用ID生成,我能从批处理中获益吗?您的ID生成策略不是
IDENTITY
,而是基于表的策略,因此理论上您可以使用批处理。但正如我在回答中所说的,这可能取决于您使用的自定义方言的能力,您必须尝试并调查它。
@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;