首先在service层定义两个方法
void
batchUpdate(List list);
void
batchInsert(List list);
下面为了方便复制
@PersistenceContext
protected EntityManager em;
@Override
@Transactional
public void batchUpdate(List list) {
for (int i = 0; i < list.size(); i++) {
em.merge(list.get(i));
if (i % 30 == 0) {
em.flush();
em.clear();
}
}
}
如果是批量插入的话需要在实现中把em.clear()去掉,因为这个方法会把对象变成游离态,由于jpa中实体id已经设置了自动生成,如果有em.clear()方法的话无法实现批量更新。em.merge()如果id设置了id则会进行更新操作,如果未检测到记录的id则会进行插入操作。