当我将Hibernate版本从3.6.8更新到4.0.0时,我在这一行中得到了关于已弃用方法buildSessionFactory()的警告:

private static final SessionFactory sessionFactory =
         new Configuration().configure().buildSessionFactory();

Javadoc建议使用另一种方法

buildSessionFactory (ServiceRegistry ServiceRegistry)

但在文档中我发现了弃用的变体


当前回答

是的,它被弃用了。用下面的代码替换你的SessionFactory:

在Hibernate 4.0, 4.1, 4.2

private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

public static SessionFactory createSessionFactory() {
    Configuration configuration = new Configuration();
    configuration.configure();
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
            configuration.getProperties()). buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    return sessionFactory;
}

更新:

在Hibernate 4.3中,ServiceRegistryBuilder已弃用。请使用以下语句。

serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
            configuration.getProperties()).build();

其他回答

在最新的hibernate 4.3.0版本中创建SessionFactory对象的更好方法如下:

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());

道理很简单:JBoss文档并不是100%维护得很好。按照JavaDoc的说法:buildSessionFactory(ServiceRegistry ServiceRegistry)。

这里有很多hibernate核心框架中已弃用的api。

我们已经创建了会话工厂,如下所示:

SessionFactory SessionFactory = new Configuration().configure(). buildessionfactory ();

方法buildSessionFactory在hibernate 4发行版中已弃用,并被新的API所取代。如果你使用hibernate 4.3.0及以上版本,你的代码必须是:

配置Configuration = new Configuration().configure(); StandardServiceRegistryBuilder生成器= new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); SessionFactory factory = configuration.buildSessionFactory(builder.build());

从4.3.0开始,类ServiceRegistryBuilder被StandardServiceRegistryBuilder取代。看起来在5.0版本中会有很多变化。但是,对于已弃用的api和适合使用的替代方案仍然没有太多的明确说明。每一个增量版本都会出现更多弃用的API,它们都是为了5.0版本的核心框架进行微调。

如果你正在使用Hibernate 5.2及以上版本,那么你可以使用这个:

  private static StandardServiceRegistry registry;
  private static SessionFactory sessionFactory;

  public static SessionFactory getSessionFactory() {
    if (sessionFactory == null) {
      try {
        // Creating a registry
        registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();

        // Create the MetadataSources
        MetadataSources sources = new MetadataSources(registry);

        // Create the Metadata
        Metadata metadata = sources.getMetadataBuilder().build();

        // Create SessionFactory
        sessionFactory = metadata.getSessionFactoryBuilder().build();

      } catch (Exception e) {
        e.printStackTrace();
        if (registry != null) {
          StandardServiceRegistryBuilder.destroy(registry);
        }
      }
    }
    return sessionFactory;
  }

  //To shut down
 public static void shutdown() {
    if (registry != null) {
      StandardServiceRegistryBuilder.destroy(registry);
    }
  }
public class HibernateSessionFactory {

private static final SessionFactory sessionFactory = buildSessionFactory1();

private static SessionFactory buildSessionFactory1() {
Configuration configuration = new Configuration().configure(); // configuration
                                                                // settings
                                                                // from
                                                                // hibernate.cfg.xml

StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();


serviceRegistryBuilder.applySettings(configuration.getProperties());

ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();

return configuration.buildSessionFactory(serviceRegistry);
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
 }

public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
 }