![](/img/trans.png)
[英]spring.jpa.hibernate.ddl-auto=update not working in spring boot
[英]Spring boot hibernate/jpa batch update not working
应用属性
spring.datasource.url=jdbc:as400://localhost/
spring.jpa.properties.hibernate.jdbc.batch_size = 30
spring.jpa.properties.hibernate.order_updates = true
spring.jpa.properties.hibernate.batch_versioned_data = true
实体 -
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "entity")
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false);
@ManyToOne
@JoinColumn(name = "HDR_ID", referencedColumnName = "HDR_ID")
@JsonIgnore
private Header header;
@ManyToOne
@JoinColumn(name = "STS_ID", referencedColumnName = "STS_ID")
private Status status;
}
服务 -
this.myRepository.saveAll(MyEntitylist);
摇篮 -
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'org.springframework.boot:spring-boot-starter-web'
我正在使用 Spring Boot 2.3.5.RELEASE。 我正在尝试使用休眠批处理更新批量记录,但似乎不起作用。 我没有收到任何错误,记录在数据库中更新没有任何问题,但没有性能改进。 实际上,无论是否使用 Hibernate 批处理,我都找不到任何区别。 我检查了日志,他们的查询记录了每条记录,例如,如果我尝试保存 1000 条记录,那么日志中将有 1000 个更新查询。
我期望批处理后的更新查询较少,这取决于批处理大小,并且与没有批处理查询相比,它花费的时间相对较少。
我的代码中是否有任何配置问题? 有没有像 jdbc:as400 的 reWriteBatchedInserts 这样的选项来显示多行插入查询?
仅仅因为您在数据库日志中看到查询并不意味着批处理不起作用。 JDBC 批处理是协议级别的优化,依赖于驱动程序支持。 JDBC 驱动程序可以通过发出单独的语句来实现这一点。 优化通常来自重用相同的服务器句柄并批量发送值。 但是对于 1000 个元素,增益可能太小了。 如果您没有看到任何改进,您应该就此咨询您的驱动程序供应商。 您没有显示记录了哪种查询,您确定在更新语句之间没有执行其他语句吗?
如果您使用身份标识符生成器,Hibernate 会在 JDBC 级别透明地禁用插入批处理。
https://docs.jboss.org/hibernate/core/4.3/devguide/en-US/html_single/#batch
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.