Java 如何在SpringBatch Writer中使用Hibernate无状态会话

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

是否有一种方法可以在参与当前spring批处理JDBC事务和Hibernate事务的spring批处理编写器中使用
无状态会话

我试过了

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批处理包。(我将调整我的问题)