在hibernate 4中不推荐使用buildSessionFactory()吗?

pus*_*tic 213 java hibernate

当我将Hibernate的版本从3.6.8.final更新到4.0.0.final时,我收到了关于buildSessionFactory()此行中已弃用方法的警告:

private static final SessionFactory sessionFactory =
         new Configuration().configure().buildSessionFactory();
Run Code Online (Sandbox Code Playgroud)

javadoc建议使用另一种方法

buildSessionFactory(ServiceRegistry serviceRegistry)

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

你能帮我解决这个小小的误会吗?

bat*_*tar 373

是的,它已被弃用.用以下内容替换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;
}
Run Code Online (Sandbox Code Playgroud)

更新:

Hibernate 4.3中,不推荐使用 ServiceRegistryBuilder .请改用以下内容.

serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
            configuration.getProperties()).build();
Run Code Online (Sandbox Code Playgroud)

  • 似乎hibernate团队的任务是弃用他们创建的所有东西. (42认同)
  • 是的,似乎ServiceRegistryBuilder本身已被弃用,查看文档,他们建议使用StandardServiceRegistryBuilder.所以我猜这个调用现在应该是新的StandardRegistryBuilder().applySettings(configuration.getProperties()).build(); (11认同)
  • 而不是build()需要buildServiceRegistry(),对吧?我找不到ServiceRegistry.build(). (7认同)
  • org.hibernate.service.ServiceRegistryBuilder也被删除了! (6认同)

zie*_*mer 16

是的,它已被弃用. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory()专门告诉你使用你找到的另一种方法(buildSessionFactory(ServiceRegistry serviceRegistry)) - 所以使用它.

文档从发行版复制到发行版,可能还没有更新(它们不会在每个版本中重写手册) - 所以请相信Javadocs.

可以在以下位置查看此更改的细节:

一些额外的参考:


小智 7

要么

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();

    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

验证代码在Hibernate 4.3.0中工作.请注意,您可以删除XML文件名参数,或者在那里提供自己的路径.这类似于(但是错别字更正)其他帖子,但这一个是正确的.

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


Configuration configuration = new Configuration();
configuration.configure("/com/rtw/test/hiber/hibernate.cfg.xml");
ServiceRegistry  serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();        
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Run Code Online (Sandbox Code Playgroud)