Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将无状态会话与Spring数据JPA和Hibernate一起使用?_Spring_Hibernate_Jpa_Spring Data Jpa_Stateless Session - Fatal编程技术网

如何将无状态会话与Spring数据JPA和Hibernate一起使用?

如何将无状态会话与Spring数据JPA和Hibernate一起使用?,spring,hibernate,jpa,spring-data-jpa,stateless-session,Spring,Hibernate,Jpa,Spring Data Jpa,Stateless Session,我在Hibernate中使用Spring+Spring数据JPA,我需要执行一些大型且昂贵的数据库操作 如何使用无状态会话执行此类操作?解决方案是实现一个Spring factory bean来创建此无状态会话,并将其注入自定义存储库实现中: public class MyRepositoryImpl implements MyRepositoryCustom { @Autowired private StatelessSession statelessSession;

我在Hibernate中使用Spring+Spring数据JPA,我需要执行一些大型且昂贵的数据库操作


如何使用
无状态会话
执行此类操作?

解决方案是实现一个Spring factory bean来创建此
无状态会话
,并将其注入自定义存储库实现中:

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

}
查看
无状态SessionFactoryBean
和完整的要点。使用Spring3.2.2、SpringDataJPA1.2.0和Hibernate4.1.9


多亏了这一点,还有那个附加了
无状态SessionFactoryBean
代码的家伙。希望这对某些人有所帮助,它对我来说是一种魅力。

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

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


使用无状态会话的行为与使用Spring的
JdbcTemplate
基本相同。使用
无状态会话的好处是到SQL的映射和转换由Hibernate处理。使用my
无状态会话FactoryBean
时,甚至可以混合使用
会话
无状态会话
混合在一个事务中。但是请小心修改由
会话
加载的实体并将其持久化为
无状态会话
,因为这将导致锁定问题。

由于会话具有数据库连接,您是否担心无状态会话实例的生存期?无状态会话持有的连接的生存期是否与MyRepositoryImpl实例的生存期基本相同?它看起来像是一个代理,而真正的无状态会话是由无状态会话同步关闭的。我们在项目中使用了无状态会话代码。但是,我们需要迁移代码to SpringBoot 1.5.12版本。因此它继承了Hibernate 5.0.12。我们遇到了一个问题,TransactionContext不存在。甚至HibernateEntityManagerFactory也在折旧。如果您能提供帮助,那将非常棒。