# Hibernate 4：如何构建`SessionFactory`

> 原文： [https://howtodoinjava.com/hibernate/hibarnate-4-how-to-build-sessionfactory/](https://howtodoinjava.com/hibernate/hibarnate-4-how-to-build-sessionfactory/)

如果您一直在观看以前的 Hiberate 版本，那么您一定已经注意到它们已经连续快速弃用了许多类。 **不推荐使用的类是`AnnotationConfiguration`，`ServiceRegistryBuilder`等**。 这些类用于通过 Java 代码以及是否在应用中使用它们来构建会话工厂。 它们可能效果很好，但是您总是会看到一些关于其贬值的恼人警告。

在本教程中，我将给出一个**示例**，该示例在不使用上述不推荐使用的类的情况下构建 Hiberate `SessionFactory`。 我正在使用最新的 Hiberate 版本，即 [**Hibernate 4.3.6.Final**](http://hibernate.org/orm/downloads/ "hibernate latest version")，因此您可以确保使用最新的方法来构建会话工厂。

## 建立`SessionFactory`时使用的类

我已经使用以下类在 Hiberate 4 中构建`SessionFactory`。

1.  **`Configuration`**：代替不建议使用的 `AnnotationConfiguration`
2.  **`StandardServiceRegistryBuilder`** ：代替不推荐使用的`ServiceRegistryBuilder`

## 如何在 Hibernate 4 中构建`SessionFactory`

使用下面的示例代码在 hibernate 4 中构建会话工厂。可以根据需要随意调整代码。

```java
package com.howtodoinjava.demo.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateUtil
{
   private static SessionFactory sessionFactory = buildSessionFactory();

   private static SessionFactory buildSessionFactory()
   {
      try
      {
         if (sessionFactory == null)
         {
            Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml"));
            StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
            serviceRegistryBuilder.applySettings(configuration.getProperties());
            ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
         }
         return sessionFactory;
      } catch (Throwable ex)
      {
         System.err.println("Initial SessionFactory creation failed." + ex);
         throw new ExceptionInInitializerError(ex);
      }
   }

   public static SessionFactory getSessionFactory()
   {
      return sessionFactory;
   }

   public static void shutdown()
   {
      getSessionFactory().close();
   }
}

```

希望上述信息对**从 Hiberate 3 迁移到 Hiberate 4** 有所帮助。

**祝您学习愉快！**