我正在尝试使用 spring 3.2 和 hibernate 4 创建 sessionFactory
bean。为此我使用了以下代码。但问题是 buildSessionFactory()
已弃用 并且建议在 javadoc 中改用 buildSessionFactory(ServiceRegistry serviceRegistry)
。但是,我无法理解什么是 ServiceRegistry 以及如何使用 buildSessionFactory(ServiceRegistry serviceRegistry)
。
@Configuration
public class AppConfig {
...
@Bean
public SessionFactory sessionFactory() {
return new LocalSessionFactoryBuilder(dataSource())
.scanPackages("com.mypackages")
.addProperties(hibernateProperties())
<strike>.buildSessionFactory();</strike>
}
}
最佳答案
ServiceRegistry
接口(interface)与服务的概念相关(这是 Hibernate 4 的新概念)。服务是为 Hibernate 提供各种功能的类,用户可以为其插入替代实现。参见 this wiki page了解详情。
你是对的,方法 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;
}
但现在已弃用的方法 buildSessionFactory()
也为您执行相同的 ServiceRegistry
初始化。
Spring 的LocalSessionFactoryBuilder
类只是Hibernate 的Configuration
类的扩展。但是由于 Spring 的所有特定工作都是在覆盖方法 LocalSessionFactoryBuilder.buildSessionFactory()
中完成的,因此您不能在 Spring 环境中使用方法 buildSessionFactory(ServiceRegistry serviceRegistry)
。没什么,因为可以使用执行完全相同工作的 buildSessionFactory()
。因此,让我们用 @SuppressWarnings("deprecation")
注释 AppConfig
中的方法并耐心等待 Spring 提供与 Hibernate 4 更好的集成。
关于java - 使用 Spring、Hibernate 和 LocalSessionFactoryBuilder 配置 sessionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14806400/