Java 如何在SpringBatch Writer中使用Hibernate无状态会话
是否有一种方法可以在参与当前spring批处理JDBC事务和Hibernate事务的spring批处理编写器中使用Java 如何在SpringBatch Writer中使用Hibernate无状态会话,java,hibernate,batch-processing,spring-batch,Java,Hibernate,Batch Processing,Spring Batch,是否有一种方法可以在参与当前spring批处理JDBC事务和Hibernate事务的spring批处理编写器中使用无状态会话 我试过了 public class MyWriter implements ItemWriter<SomeClass> { @Override public void write(final List<? extends SomeClass> items) throws Exception { StatelessSe
无状态会话
我试过了
public class MyWriter implements ItemWriter<SomeClass> {
@Override
public void write(final List<? extends SomeClass> items) throws Exception {
StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
for(SomeCLass item : items){
session.insert(item);
}
tx.commit();
session.close();
}
}
公共类MyWriter实现ItemWriter{
@凌驾
public void write(最终列表如果Spring批处理使用常规Spring事务管理(HibernateTransactionManager
等),那么您可以尝试使用DataSourceUtils
获取绑定到当前事务的连接
,并在打开无状态会话时使用它:
Connection c = DataSourceUtils.getConnection(dataSource);
StatelessSession session = sessionFactory.openStatelessSession(c);
您可能需要让HibernateTransactionManager
了解用于创建SessionFactory
的DataSource
,请参阅。这是一个好主意,但遗憾的是在我的情况下无法正常工作。这会创建绑定到当前连接和sql事务的无状态会话。在我的情况下,我使用的是hibernate属性hibernate.jdbc.batch_size
设置为>50。这会导致在完成writer方法时,当前位于无状态会话jdbc批处理中的所有insert/update/delete语句都未提交的问题,因为sql事务正在提交,而无状态会话正在等待提交jdbc批处理包。(我将调整我的问题)