Hibernate程序仍在运行

时间:2017-03-24 06:01:48

标签: java hibernate hql

如果我没有开始交易保存到交易中,我的小程序会正确终止。

e.target.text

print语句确认session和sessionFactory已成功关闭且事务不再处于活动状态。据我所知,没有办法检查注册表是否被成功销毁。这是输出......

public static void main(String[] args){
    StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
    SessionFactory sessionFactory = null;       
    Session session = null;
    Transaction t = null;

    try{
        sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        session = sessionFactory.openSession();

        session.beginTransaction();
        session.save(new UserInfo("garb@junkHeap.com", "password2", "erical garb"));
        t = session.getTransaction();
        t.commit();
    }
    catch (Exception e){
        System.out.println("Could not create connection!");
        e.printStackTrace();
    }
    finally{

        DAOUtilities.closeResource(session, "Session");
        DAOUtilities.closeResource(sessionFactory, "sessionFactory");
        StandardServiceRegistryBuilder.destroy(registry);

        System.out.println("Session open: " + session.isOpen());
        System.out.println("Factory open: " + sessionFactory.isOpen());
        System.out.println("Transaction active: " + t.isActive());
    }
}

我错过了什么?任何建议都会受到批评,谢谢。

注意:我的数据库gui正在检测每次执行一次会话泄漏,并且更改会准确地反映在数据库中。

1 个答案:

答案 0 :(得分:0)

我发现很久以前我实施的数据库验证功能存在问题。由于开放的postgres会话并没有阻止我的程序终止,我忽略了错误。

我实现了在https://vladmihalcea.com/the-best-way-to-detect-database-connection-leaks/

找到的会话泄漏检测器

它给我的信心让我找到了罪魁祸首。我强烈建议在所有利用数据库的程序中实施此类测试。我希望在我开始这个项目时我已经知道这个工具了,这会给我节省很多时间。希望这篇文章能够为其他人节省我失去的时间。