java - 如何从 servlet 内初始化 hibernate session ?

标签 java hibernate servlets

我正在学习 java servlet 和 hibernate。我每个都有单独的工作示例,现在正在尝试将 hibernate 示例合并到 http servlet 中。

我的简单 hibernate 示例从此代码开始

factory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = factory.openSession();

当通过 http get 调用 http servlet 时,我知道它首先调用构造函数,然后调用 doGet 方法。

现在我的问题(请对我轻松一点,因为我是这里的新手):从 servlet 调用 hibernate 初始化代码的可接受方法是什么?我是否将上面的初始化代码放在构造函数方法中?

最佳答案

管理 hibernate session 的方法有很多。最常见的方法之一是使用 HibernateUtil 类。通常的实现是,SessionFactory 是静态初始化的,这意味着初始化只会完成一次(在类加载时)。然后它公开一个静态方法来获取构建的 SessionFactory 实例。这是 dzone 的实现示例。

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory;
    static {
        try {
            sessionFactory = new Configuration().configure()
                    .buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

对于 session 的打开和关闭,通常将其与请求处理视为一个单元,因此您可以在 doGet 的开头调用 HibernateUtil.getSessionFactory().openSession() doPost 并确保在方法结束之前关闭 session 。

关于java - 如何从 servlet 内初始化 hibernate session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569343/

相关文章:

java - 如何在 Maven 插件之外加载 org.apache.maven.settings.Settings?

java - Hibernate + PostgreSQL + 网络地址类型(inet、cdir)

java - 创建jar文件时@Transactional(rollbackfor={null})

java - 从远程服务器运行 jsp 页面

java - 如何使 mockito 为 for 循环中的每次迭代从列表中返回值

java - 我该如何配置这个java爬虫

java - JTabbedPane 选项卡组件调整大小以适应

java - 为什么我们需要一个列表作为 hibernate 中一对多关系的实体类的属性?

java - ServletContext setInitParameter 的目的是什么?如何使用它?

Java SIP 客户端就像 Android 中存在的那样