当我将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();

其他回答

是的,它被弃用了。http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory()特别告诉您使用您找到的另一个方法(buildSessionFactory(ServiceRegistry ServiceRegistry))—因此使用它。

文档从一个版本复制到另一个版本,可能只是还没有更新(他们不会在每个版本都重写手册)——所以请相信Javadocs。

有关更改的详情,请参阅以下网址:

源代码:https://github.com/hibernate/hibernate-core/commit/0b10334e403cf2b11ee60725cc5619eaafecc00b 门票:https://hibernate.onjira.com/browse/hhh - 5991

其他参考资料:

http://relation.to/Bloggers/HibernateCore40IsFinal http://relation.to/19942.lace http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch07.html#services-registry http://sourceforge.net/apps/mediawiki/hibernate/index.php?title=Category:Services

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

如果有人更新到5.1,这是它是如何工作的

StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
                MetadataSources sources = new MetadataSources(registry);
                Metadata metadata = sources.getMetadataBuilder().build();
                sessionFactory = metadata.getSessionFactoryBuilder().build();

而不是hibernate 4.3中的下面

 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
            configuration.getProperties()). buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);

公共无效sampleConnection()抛出异常{

     Configuration cfg = new Configuration().addResource("hibernate.cfg.xml").configure();
     StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
     SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build());
     Session session = sessionFactory.openSession();
     logger.debug(" connection with the database created successfuly.");
}

or

public class Hbutil {

    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;
    }

    public static SessionFactory getSessionFactory() {
        return configureSessionFactory();

    }
}