我正在尝试sessionFactory使用spring 3.2和hibernate 4 创建bean。为此,我使用了以下代码。但问题buildSessionFactory()是 过时 和buildSessionFactory(ServiceRegistry serviceRegistry)建议,而不是使用的javadoc。但是,我无法理解什么是 ServiceRegistry 以及如何使用buildSessionFactory(ServiceRegistry serviceRegistry)。
sessionFactory
buildSessionFactory()
buildSessionFactory(ServiceRegistry serviceRegistry)
@Configuration public class AppConfig { ... @Bean public SessionFactory sessionFactory() { return new LocalSessionFactoryBuilder(dataSource()) .scanPackages("com.mypackages") .addProperties(hibernateProperties()) ~~.buildSessionFactory();~~ } }
ServiceRegistry接口与服务的概念有关(对于Hibernate 4是新的)。服务是为Hibernate提供各种功能的类,用户可以为它们插入替代的实现。有关详细信息,请参见此Wiki页面。
ServiceRegistry
没错,buildSessionFactory()Hibernate的Configuration类中不赞成使用method,而赞成method buildSessionFactory(ServiceRegistry serviceRegistry)。在纯Hibernate的环境(没有Spring)中,假定您将以以下方式初始化的实例ServiceRegistry:
Configuration
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更好的集成。
LocalSessionFactoryBuilder
LocalSessionFactoryBuilder.buildSessionFactory()
AppConfig
@SuppressWarnings("deprecation")