不,vanilla JPA 中没有批量插入操作。
是的,每个插入都将在其自己的事务中完成。@Transactional
属性(没有限定符)表示传播级别REQUIRED
(如果事务不存在,则创建事务)。假设你有:
public class Dao {
@Transactional
public void insert(SomeEntity entity) {
...
}
}
你来做这件事:
public class Batch {
private Dao dao;
@Transactional
public void insert(List<SomeEntity> entities) {
for (SomeEntity entity : entities) {
dao.insert(entity);
}
}
public void setDao(Dao dao) {
this.dao = dao;
}
}
这样,整个插入组就被包装在一个事务中。如果您正在谈论大量插入,您可能希望将其拆分为 1000、10000 或任何作为足够大的未提交事务的组,这可能会使数据库资源匮乏,并且可能仅由于大小而失败。
注意: @Transactional
是一个 Spring 注解。请参阅Spring 参考中的事务管理。