使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory

The*_*ect 6 java spring hibernate sessionfactory

我正在尝试sessionFactory使用spring 3.2和hibernate 4 创建bean.我使用了以下代码.但问题是buildSessionFactory()弃用,buildSessionFactory(ServiceRegistry serviceRegistry)建议在javadoc中使用.但是,我无法理解什么是ServiceRegistry以及如何使用buildSessionFactory(ServiceRegistry serviceRegistry).


@Configuration
public class AppConfig {

    ...


    @Bean
    public SessionFactory sessionFactory() {
    return new LocalSessionFactoryBuilder(dataSource())
        .scanPackages("com.mypackages")
        .addProperties(hibernateProperties())
        .buildSessionFactory();

    }
}
Run Code Online (Sandbox Code Playgroud)

Art*_*nov 9

ServiceRegistryinterface与服务的概念有关(这是Hibernate 4的新特性).服务是为Hibernate提供各种功能的类,用户可以为其插入替代实现.有关详细信息,请参阅此Wiki页面.

你是对的,buildSessionFactory()在Hibernate的Configuration类中不赞成使用方法buildSessionFactory(ServiceRegistry serviceRegistry).在纯Hibernate的环境中(没有Spring),你应该ServiceRegistry以这种方式初始化实例:

private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

private static SessionFactory configureSessionFactory() throws HibernateException {
    Configuration configuration = new Configuration();
    configuration.configure();

    serviceRegistry = new ServiceRegistryBuilder()
             .applySettings(configuration.getProperties())
             .buildServiceRegistry();

    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    return sessionFactory;
}
Run Code Online (Sandbox Code Playgroud)

但到目前为止,已弃用的方法buildSessionFactory()也会ServiceRegistry为您执行相同的初始化.

Spring的LocalSessionFactoryBuilder类只是Hibernate Configuration类的扩展.但是由于Spring的所有特定工作都是在override方法中完成的,所以LocalSessionFactoryBuilder.buildSessionFactory()你不能buildSessionFactory(ServiceRegistry serviceRegistry)在Spring的环境中使用方法.没什么用的buildSessionFactory(),因为它可以使用完全相同的工作.因此,让我们只是注释方法AppConfig@SuppressWarnings("deprecation")耐心等待春天提供与Hibernate 4更好的集成.