管理hibernate会话

时间:2010-10-28 15:12:50

标签: hibernate spring session-management

我正在尝试调试一些存在性能问题的网络应用。我开启了hibernate日志记录,我看到了很多这样的事情:

2010-10-28 10:58:00,423 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786198212608
2010-10-28 10:58:01,390 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786202173440
2010-10-28 10:58:01,418 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786202288128
2010-10-28 10:58:26,181 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 5276786303717376

我担心没有关于“关闭会话”

的日志

我目前正在看这个: http://static.springsource.org/spring/docs/2.5.x/reference/orm.html 但它没有任何让我对日志安心的东西

2 个答案:

答案 0 :(得分:3)

查看source,该消息似乎是从SessionImpl.java的构造函数中记录的。会话关闭时会有相应的日志语句(请参阅方法public Connection close() throws HibernateException),但会在TRACE级别记录。我对slf4j并不熟悉,但从this piece of documentation来看,TRACE看起来比DEBUG更精细。因此,请尝试增加日志记录量(可能是ALL?)并验证会话是否已关闭。

答案 1 :(得分:1)

您是如何访问会话的?您使用的是弹簧交易注释吗?

我们在当前应用程序中使用了hibernate模板..虽然显然不再需要它。虽然我确实看到了其他的hibernate初始化调试语句,但我还是看不到它作为调试出现。

无论如何,您可以获得对会话工厂的引用并调用sessionFactory.getStatistics()。getSessionOpenCount()

您可能必须调用setStatisticsEnabled(true)

http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/stat/Statistics.html

这至少可以让你获得开放会话的数量,看看它是否会不断上升。

Per binil的回答是,还有一个关于不同日志级别的打开/关闭日志条目的错误报告。 http://opensource.atlassian.com/projects/hibernate/browse/HHH-2425