小编典典

使用Spring,Hibernate和LocalSessionFactoryBuilder配置sessionFactory

hibernate

我正在尝试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();~~

    }
}

阅读 493

收藏
2020-06-20

共1个答案

小编典典

ServiceRegistry接口与服务的概念有关(对于Hibernate
4是新的)。服务是为Hibernate提供各种功能的类,用户可以为它们插入替代的实现。有关详细信息,请参见此Wiki页面

没错,buildSessionFactory()Hibernate的Configuration类中不赞成使用method,而赞成method
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;
}

但是到目前为止,不推荐使用的方法buildSessionFactory()ServiceRegistry为您执行了相同的初始化。

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

2020-06-20