java - 使用 Spring、Hibernate 和 LocalSessionFactoryBuilder 配置 sessionFactory

标签 java spring hibernate sessionfactory

我正在尝试使用 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/

相关文章:

java - 使用正则表达式根据 oracle 运算符解析字符串

java - 更改面孔映射后缺少资源

javascript - 如何通过对话框向 Controller 发送数据?

java - 以一对一关系分配值

java - 编译依赖于版本 0.3.150227 google-cloud-dataflow-java-sdk-all 的 gradle 项目时出错

java - 我很困惑, volatile 真的有用吗?

java - Spring JUnit ClassPathResource FileNotFoundException

java - springboot + eureka + log4j2 空日志文件

java - Hibernate @Synchronize 似乎不起作用

hibernate - Lucene 的 ClassCastException