使用Hibernate SessionFactory统计信息进行参数绑定

时间:2011-08-11 06:38:14

标签: hibernate nhibernate hql

以下是摘录:

    this.sessionFactory.getStatistics().setStatisticsEnabled(true);

...

    final Map<String, Object> customParams =  new HashMap<String, Object>();
    customParams.put("active", true);
    genericDao.getModifiedDate("getModifiedDateForAllActiveTestObjects", customParams);
    String[] queries = this.sessionFactory.getStatistics().getQueries();

这给我的查询为:

SELECT max(test.modifiedDate) FROM GenericDomain AS test where test.active= :active

这段代码实际上是在我的单元/集成测试中,我想知道参数绑定是否实际发生,即针对DB infact的最终SQL查询中的where子句包含test.active = true。

这甚至可能吗?如果没有,那么我怎么能得到这些信息?

1 个答案:

答案 0 :(得分:0)

不确定它是否是最佳方式,但我在其中一个项目(C#)中使用它。我实现了一个自定义的log4net appender,用于捕获发送到db的sql NH。

配置

var sqlLogger = (Logger)LogManager.GetRepository().GetLogger("NHibernate.SQL");
m_sqlappender = new NhSqlAppender(10);  // size of the ring-buffer
sqlLogger.AddAppender(m_sqlappender);
if (!sqlLogger.IsEnabledFor(Level.Debug))
    sqlLogger.Level = Level.Debug;

用法

string[] queries = m_sqlappender.CurrentQueries.Pop();

CurrentQueries实现为一个ringbuffer-stack,因此我可以获得最新的查询