当前位置: 首页 > 知识库问答 >
问题:

如何从Hibernate 4.3.4.Final中检索sessionFactory?

江迪
2023-03-14

以前我使用以下代码配置sessionFactory,但在将hibernate版本从4.2.1.Final升级到4.3.4.Final后,我无法使用以下代码检索sessionFactory,因为ServiceRegistryBuilder()已被弃用。

我使用这个链接来创建它,但提供的函数没有返回任何东西,因此它遇到了预编译错误。

 private static SessionFactory configureSessionFactory() {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            return sessionFactory;
        } catch (HibernateException e) {
            System.out.append("** Exception in SessionFactory **");
            e.printStackTrace();
        }
        return sessionFactory;
    }

     static {
    try {
        sessionFactory = configureSessionFactory();
    } catch (Exception e) {
        System.err.println("%%%% Error Creating SessionFactory %%%%");
        e.printStackTrace();
    }
}

private HibernateUtil() {
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

public static Session getSession() throws HibernateException {
    Session session = threadLocal.get();

    if (session == null || !session.isOpen()) {
        if (sessionFactory == null) {
            rebuildSessionFactory();
        }
        session = (sessionFactory != null) ? sessionFactory.openSession() : null;
        threadLocal.set(session);
    }

    return session;
}

public static void rebuildSessionFactory() {
    try {
        sessionFactory = configureSessionFactory();
    } catch (Exception e) {
        System.err.println("%%%% Error Creating SessionFactory %%%%");
        e.printStackTrace();
    }
}

public static void closeSession() throws HibernateException {
    Session session = (Session) threadLocal.get();
    threadLocal.set(null);

    if (session != null) {
        if (session.isOpen()) {
            session.close();
        }
    }
}

共有3个答案

壤驷华美
2023-03-14

是的,他们已经弃用了以前的ServiceRegistryBuilder(),下面是使用Hibernate 4.3.4的方法

public void testConnection() throws Exception {

            logger.info("Trying to Connect With a DataBase.");
            Configuration configuration = new Configuration();
            configuration.configure("Your.cfg.xml");
            ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
                            .getProperties());
            SessionFactory sessionFactory = configuration
                            .buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
            Session session = sessionFactory.openSession();
            logger.info("Database connection created successfuly.");
    }

来源:在Hibernate 4中创建会话工厂

商棋
2023-03-14

我测试了这个,它在Hibernate 4.3.6上运行

public class HUtil{   
  private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

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

public static SessionFactory getSessionFactory() {
    return createSessionFactory();
}  }
濮阳翔
2023-03-14

在4.3中,您应该使用StandardServiceRegistryBuilder。

import org.hibernate.boot.registry.StandardServiceRegistryBuilder

Standard ServiceRegstryBuilder被添加为ServiceRegstryBuilder的新父级。其余代码应该是相同的。我发现这一点“清楚”记录的唯一地方是在ServiceRegstryBuilder的4.3 JavaDocs中。

我没有注意到的一件事是,他们更改了ServiceRegistryBuilder。buildServiceRegistry()方法,只需将其转换为StandardServiceRegistryBuilder.build()。因此,它将要求您更改建筑过程的这一部分:

new ServiceRegistryBuilder()
        .applySettings(configuration.getProperties())
        .buildServiceRegistry();

变成:

new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties())
        .build();
 类似资料:
  • 问题内容: 我的目标是每个项目都有一个独立的Go Workspace。 是否可以从正在运行的Docker容器中检索Go工作空间和Go环境变量,以供IDE或文本编辑器进行开发? 我已经尝试过使用go工具和依赖项将卷映射到容器。但这需要始终将GOPATH设置为当前工作空间,并且需要在主机上具有go工具和依赖项。 问题答案: 启动容器时,您至少可以设置并传递这些环境变量: 通过使用,您可以允许主机与容器

  • {“type”:“record”、“name”:“twitter_schema”、“namespace”:“com.miguno.avro”、“fields”:[{“name”:“username”、“type”:“string”、“doc”:“Twitter.com上的用户帐户名称”}、{“name”:“tweet”、“type”:“string”、“doc”:“用户的Twitter消息内容”}

  • 问题内容: 我们如何从文本字段中检索值?我需要将值转换为进一步处理。我已经在单击按钮时创建了一个文本字段,我需要存储输入到中的值,你能提供一个代码段吗? 问题答案: 参见Java文档中的JTextField 示例代码可以是:

  • 目前我正在做一个项目,我需要从一个表中提取最新的数据用于报告目的。下面是示例表结构:- 我使用下面的SQL查询并能够提取数据。 但问题是真正的表非常大。大约有85k行,这个查询需要一些时间。还有其他更好的方法吗。我正在使用Oracle 11g R2。请建议 这是SQLfiddle链接http://sqlfiddle.com/#!4/b3fe1/8

  • 我试图使用庞大的Node.js包将文件从Docx转换为HTML。庞大的自述文件建议使用以下格式转换文件: 在函数中的任何位置放置语句将不允许我使用存储的html,但是我可以将正确的html内容输出到控制台。我需要关于如何返回/使用promise之外的html变量的建议,谢谢。