java - hibernate中的 session 和 session 工厂

标签 java hibernate session sessionfactory

我正在使用 Java、Hibernate 和 SQL Server 创建一个应用程序。我对 Session 和 Session Factory 的对象声明有疑问。 起初,当我开始创建应用程序时,我经常在需要时创建 session 和 session 工厂。但现在我注意到,当我如上所述创建 session 和 session 工厂时,我的应用程序变得很慢,因此我开始在登录页面创建所有需要的 session 和 session 工厂,并将修饰符指定为 public static。

    public static Session session = null;
    public static SessionFactory sessionfactory = new org.hibernate.cfg.Configuration().configure().buildSessionFactory();
    public static Session session1 = null;
    public static SessionFactory sessionfactory1 = new org.hibernate.cfg.Configuration().configure().buildSessionFactory();
    public static Session session2 = null;
    public static SessionFactory sessionfactory2 = new org.hibernate.cfg.Configuration().configure().buildSessionFactory();

现在,每当我需要使用 session 和 session 工厂时,我都会将 session 称为 Login.session (loginpagefilename.sessionobject)。

 Login.session = Login.sessionfactory.openSession();
        Login.session.beginTransaction();
        String hql = "FROM TEST_SERVICES_POJO lts WHERE NOT EXISTS (SELECT lsm.inttestid FROM PARAMETER_MAPPING_POJO lsm WHERE lsm.status = 1 and lsm.inttestid=lts.inttestid)";
        org.hibernate.Query query = Login.session.createQuery(hql);
        DefaultTableModel model = (DefaultTableModel) testtable.getModel();
        model.setRowCount(0);
        for (Iterator it = query.iterate(); it.hasNext();) {
            TEST_SERVICES_POJO slp = (TEST_SERVICES_POJO) it.next();
            Object[] row = {slp.getTestname()};
            model.addRow(row);
        }
        Login.session.getTransaction().commit();

首先我没有使用hibernate的回滚功能。但现在我想实现hibernate的回滚功能。因此,采用哪种方法会给我带来更好的性能。请给我建议一个方法。提前致谢。

最佳答案

最重要的事情:永远不要为每个应用程序创建多个 SessionFactory(除非您有多个持久性上下文,然后为每个应用程序和持久性上下文创建一个)。继续创建 SessionFactories 会首先降低你的性能,然后由于 OutOfMemoryError 导致你的应用服务器。在应用程序启动时创建一个 SessionFactory 并将其保存在可访问的地方 - 将其存储在 jndi 中,将其保存在全局类或类似的类中。

根据需要创建Session - 最佳匹配通常是每个事务一个Session,因此hibernate可以利用其缓存机制。

关于java - hibernate中的 session 和 session 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037603/

相关文章:

django - 如何在 Django 中根据域名或 TLD 设置 urlpatterns?

java - Java中如何重用没有框架的实例?

java - 如何在 Selenium Web 驱动程序中获取 userAgent 信息

hibernate - Grails一对多保存的子代仅刷新父子集

java - 带有@IdClass注释的类中的可插入对象

java - org.springframework.beans.factory.annotation.InjectionMetadata.needsRefresh

java - 使用 putExtra 将值传递给 Intent 服务

java - 这两个程序的时间复杂度

php登录 session

session - 将 session 标识符作为查询字符串参数传递