How to use StatelessSession with Spring Data JPA and Hibernate?

hibernate, jpa, spring, spring-data-jpa, stateless-session

Solution

A solution is to implement a Spring factory bean to create this `StatelessSession` and inject it in your custom repositories implementation:

public class MyRepositoryImpl implements MyRepositoryCustom {

    @Autowired
    private StatelessSession statelessSession;

    @Override
    @Transactional
    public void myBatchStatements() {
        Criteria c = statelessSession.createCriteria(User.class);

        ScrollableResults itemCursor = c.scroll();

        while (itemCursor.next()) {
            myUpdate((User) itemCursor.get(0));
        }
        itemCursor.close();

        return true;
    }

}

Check out the `StatelessSessionFactoryBean` and the full Gist here. Using Spring 3.2.2, Spring Data JPA 1.2.0 and Hibernate 4.1.9.

Thanks to this JIRA and the guy who attached `StatelessSessionFactoryBean` code. Hope this helps somebody, it worked like a charm for me.

Problem

I'm using Spring + Spring Data JPA with Hibernate and I need to perform some large and expensive database operations. How I can use a `StatelessSession` to perform these kind of operations?

Original source