我将Spring + Spring Data JPA与Hibernate结合使用,我需要执行一些大型且昂贵的数据库操作。

如何使用StatelessSession执行此类操作?

最佳答案

一个解决方案是实现一个Spring工厂bean,以创建此StatelessSession并将其注入(inject)到您的自定义存储库实现中:

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;
    }

}

checkout StatelessSessionFactoryBean和完整的Gist here。使用Spring 3.2.2,Spring Data JPA 1.2.0和Hibernate 4.1.9。

感谢这个JIRA和附加了StatelessSessionFactoryBean代码的人。希望这对某人有帮助,它对我来说就像一种魅力。

09-13 07:35