我发现并使用了一个临时将hibernate.SQL日志记录转换为Trace的闭包,以便我可以看到生成的确切查询。但是我希望能够自动运行PostgresQL的解释,而不必单独提取查询进行分析。
日志记录关闭: (见http://www.intelligrape.com/blog/2011/10/21/log-sql-in-grails-for-a-piece-of-code/)
public static def execute(Closure closure) {
Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
Logger transactionLogger = Logger.getLogger("org.hibernate.transaction");
Level currentLevel = sqlLogger.level
Level transLevel = transactionLogger.level
sqlLogger.setLevel(Level.TRACE)
transactionLogger.setLevel(Level.TRACE)
def result = closure.call()
sqlLogger.setLevel(currentLevel)
transactionLogger.setLevel(transLevel)
result
}
用法:
def result
execute{
result=Dog.createCriteria().list{
eq("breed","Greyhound")
}
}
我想要一些可以类似方式使用的东西。
这是我可以用Criteria或Hibernate.Restrictions的子类做些什么吗?
或者在文档中是否有一些关于如何修改从GORM发送到数据库的SQL语句的内容?
感谢您的任何信息。
答案 0 :(得分:3)
假设您不希望所有查询,但只有较长时间运行的查询,您可能会发现PostgreSQL的“自动解释”加载项很有用。