Возможно использовать объяснение Postgresql для анализа запросов, сгенерированных Grails GORM - PullRequest
2 голосов
/ 03 ноября 2011

Я нашел и использовал закрытие, которое временно превращает ведение журнала 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?

Или в документах мне не хватает того, как изменить оператор SQL, отправляемый в БД из GORM?

Спасибо за любую информацию.

1 Ответ

3 голосов
/ 04 ноября 2011

Предполагая, что вы не хотите всех запросов, а только более длительных, вы можете найти полезное дополнение "auto объяснение" для PostgreSQL.

http://www.postgresql.org/docs/9.1/static/auto-explain.html

...