use*_*197 8 hibernate jpa spring-mvc jpa-2.0 spring-data-jpa
我是Spring MVC的新手,对JPA也不太了解.我想要做的就是更新记录列表,当我遍历列表并在DAO上调用update时,它的工作正常.
但我不想执行100次更新/插入操作或数据库往返.
任何人都可以告诉我如何使用批量更新更新大约100条记录,而不是执行以下操作:
Controller:
List<MyEntity> list = form.getList();
for(MyEntity e : list){
dao.update(e);
}
Dao:
public T update(T entity){
entityManager.merge(entity);
}
Run Code Online (Sandbox Code Playgroud)
是否有可能,如果有人能为我提供一种简单的方法来执行批量更新.如果我得到尽可能多的解释,我将非常感激.
谢谢
你所拥有的几乎是通过JPA更新多行的标准方法.事件spring-data-jpa暴露了封面下的save(Iterable<T> items)循环Iterator.这是另一个在选项上得到很好回答的问题,但简而言之,你正处于正确的道路上,另一种选择就是自己制定并执行更新语句.
更新:在单个事务中执行可能会提高性能,因为您只有一次事务开销.您还可以获得如果其中一个更新失败,任何以前的更新也会回滚的情况.(所以,你可能会失去之前更新的所有"工作" - 你可能想要也可能不想要)
另外,请注意您正在使用的事务管理器类型(例如JTA或JPA)和JPA实现(例如Hibernate),因为有时它们并不能很好地协同工作.
所以,在您的DAO代码中,您可能想要这样做;
update(Iterator<Entity> entities)代码在该代码中执行以下操作;
entityManager.getTransaction().begin();//start the transaction
for (Entity entity : entities) {
entityManager.merge(entity);//update an entity
Run Code Online (Sandbox Code Playgroud)
}
entityManager.getTransaction().commit();//complete the transaction
@Transactional在save(Iterable<Entity> entities)方法上使用注释.确保在Spring Context中也有事务注释支持| 归档时间: |
|
| 查看次数: |
9804 次 |
| 最近记录: |