Avi*_*tta 5 java spring hibernate spring-data-jpa
我有以下几行代码:
@RequestMapping(value="/persons",method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<List<Person>> saveUsers(@RequestBody List<Person> persons) {
persons = (List<Person>) userRepository.save(persons);
return new ResponseEntity<List<Person>>(persons, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
这是存储库:
@Transactional
public interface UserRepository extends UserBaseRepository<User> {
}
@NoRepositoryBean
public interface UserBaseRepository<T extends User> extends CrudRepository<T, Long> {
public T findByEmail(String email);
}
Run Code Online (Sandbox Code Playgroud)
它运行正常.运行代码时,我看到以下日志.
Hibernate: insert into user (email, firstname, lastname, user_type) values (?, ?, ?, 'Person')
Hibernate: insert into user (email, firstname, lastname, user_type) values (?, ?, ?, 'Person')
Hibernate: insert into user (email, firstname, lastname, user_type) values (?, ?, ?, 'Person')
Hibernate: insert into user (email, firstname, lastname, user_type) values (?, ?, ?, 'Person')
Run Code Online (Sandbox Code Playgroud)
看来,DataBase被击中了4次.我已经看到了save(iterable e)方法的实现,其中运行for循环来保存每个实体.所以,我的问题是:
是的,您正在查询数据四次。
您可以通过实现Hibernate Batching在一个批处理语句中完成插入。特别是,看看执行批量插入。使用批量插入,您必须通过显式调用会话中的flush()和clear()方法来手动控制会话。
另外,请考虑设置适当的Hibernate 批处理属性,例如批处理大小(默认为 5),以及 Hibernate 在构建批处理语句之前重新排序插入和更新的权限(如果适用):
hibernate.jdbc.batch_size = 25
hibernate.order_inserts = true
hibernate.order_updates = true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |