反复使用同一个 Hibernate Session 是一个好习惯吗

Bil*_*Dja 1 java session hibernate javafx

我正在开发 JavaFX Hibernate 桌面应用程序。我配置了我的应用程序,以便在应用程序运行直至关闭之前使用相同的会话。我就是这样做的:

public static Session getCurrentSession() {
    if (sessionFactory != null) {
        Session session = sessionFactory.getCurrentSession();
        if (session != null) {
            return sessionFactory.getCurrentSession();
        } else {
            session = sessionFactory.openSession();
            session.beginTransaction();
            return session;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

当用户关闭应用程序时,我运行第二种方法来关闭会话和 SessionFactory。

public static void closeConnections() {
    if (sessionFactory != null) {
        if (sessionFactory.getCurrentSession().isOpen()) {
            sessionFactory.getCurrentSession().close();
        }
        sessionFactory.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我是 Hibernate 新手,所以请善待我 PEACE

小智 5

Hibernate 会话应被视为“单个工作单元”。一个或多个事务可以存在于一个会话中。在大多数情况下,最佳实践是每个请求一个会话。在处理请求开始时打开会话,并在最后关闭它。

Hibernate 的一级缓存保存在“会话”中,因此,如果将其保留在用户会话中,它将命中“缓存”对象。

Hibernate 有二级缓存,您必须配置(如果您愿意)才能利用它。第二级基本上支持以下内容:查询、带有加载和获取的对象以及集合/关联,并提供跨会话、SessionFactories 和集群的缓存对象。

您没有为每个应用程序使用一个会话,而是使用“当前会话”概念,该概念打开一个会话并将其存储在上下文中。如果您不关闭会话,它将保留在那里。