以下是摘录:
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。
这甚至可能吗?如果没有,那么我怎么能得到这些信息?
答案 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,因此我可以获得最新的查询