不建议使用 Hibernate 进行批处理。除非你已经有一个用 Hibernate 构建的业务层,并且你想重用一些代码,否则你应该在普通的旧 JDBC 中进行批处理,也许由 Spring Batch 之类的框架管理。
如果你想使用 Hibernate,那么你应该使用StatelessSession
.
不需要任何东西,HibernateTemplate
因为 Session 已经为您提供了所需的一切。
编辑:
您可以处理交易:
Session session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
// DO SOMETHING
tx.commit();
session.close();
顺便说一句,如果您为 10 个项目创建事务,那么我想您想将处理拆分为 10 个插入的多个事务。交易真的需要吗?因为无论如何,一个事务可能会失败,而其他事务不会,这会给您留下一些插入的实体,而有些则没有。
如果您想要批处理的原子性(全部插入或未插入),您必须为所有元素运行事务,而不仅仅是其中的 10 个。但是请注意不要锁定您的数据库...我认为将大型长时间运行的事务用于批处理并不是一个好主意。相反,您可能应该自行补偿插入失败。