如何将StatelessSession与Spring Data JPA和Hibernate一起使用?

jel*_*ies 10 spring hibernate jpa stateless-session spring-data-jpa

我正在使用Spring + Spring Data JPA和Hibernate,我需要执行一些大而昂贵的数据库操作.

我如何使用a StatelessSession来执行这些操作?

jel*_*ies 11

解决方案是实现Spring工厂bean来创建它StatelessSession并将其注入自定义存储库实现中:

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

}
Run Code Online (Sandbox Code Playgroud)

在这里查看StatelessSessionFactoryBean完整的要点.使用Spring 3.2.2,Spring Data JPA 1.2.0和Hibernate 4.1.9.

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


小智 5

为了获得更好的性能结果,您可以通过在 SessionFactory 配置上设置属性(即: )来启用SessionFactory/上的 jdbc 批处理语句。EntityManagerhibernate.jdbc.batch_sizeLocalEntityManagerFactoryBean

为了获得 jdbc 批量插入/更新的最佳优势,请写入尽可能多的相同类型的实体。Hibernate 将检测您何时编写另一种实体类型,并自动刷新批处理,即使它尚未达到配置的批处理大小。

使用 StatelessSession 的行为与使用 Spring 之类的东西基本相同JdbcTemplate。使用 SQL 的好处StatelessSession是 SQL 的映射和转换由 Hibernate 处理。当您使用 my 时,StatelessSessionFactoryBean您甚至可以在一笔交易中混合使用SessionStatelessSession混合。但要小心修改由 加载的实体Session并用 持久化它, StatelessSession因为这会导致锁定问题。