Как я просматриваю SQL, который сгенерирован nHibernate?

Есть хорошие объяснения. Я добавляю только пример, показывающий, как стирание типа работает с декомпилятором.

Исходный класс,

import java.util.ArrayList;
import java.util.List;


public class S<T> {

    T obj; 

    S(T o) {
        obj = o;
    }

    T getob() {
        return obj;
    }

    public static void main(String args[]) {
        List<String> list = new ArrayList<>();
        list.add("Hello");

        // for-each
        for(String s : list) {
            String temp = s;
            System.out.println(temp);
        }

        // stream
        list.forEach(System.out::println);
    }
}

Декомпилированный код из его байт-кода,

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Objects;
import java.util.function.Consumer;

public class S {

   Object obj;


   S(Object var1) {
      this.obj = var1;
   }

   Object getob() {
      return this.obj;
   }

   public static void main(String[] var0) {

   ArrayList var1 = new ArrayList();
   var1.add("Hello");


   // for-each
   Iterator iterator = var1.iterator();

   while (iterator.hasNext()) {
         String string;
         String string2 = string = (String)iterator.next();
         System.out.println(string2);
   }


   // stream
   PrintStream printStream = System.out;
   Objects.requireNonNull(printStream);
   var1.forEach(printStream::println);


   }
}
39
задан Larry Foulkrod 25 September 2008 в 05:59
поделиться

6 ответов

Можно поместить что-то вроде этого в app.config/web.config файл:

в configSections узле:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>

в узле конфигурации:

<log4net>
  <appender name="NHibernateFileLog" type="log4net.Appender.FileAppender">
    <file value="logs/nhibernate.txt" />
    <appendToFile value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
    </layout>
  </appender>
  <logger name="NHibernate.SQL" additivity="false">
    <level value="DEBUG"/>
    <appender-ref ref="NHibernateFileLog"/>
  </logger>
</log4net>

И не забывают звонить

log4net.Config.XmlConfigurator.Configure();

при запуске Вашего приложения, или помещать

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

в assemblyinfo.cs

В параметрах конфигурации, устанавливать "show_sql" свойство на истинный.

42
ответ дан mathieu 5 August 2019 в 16:34
поделиться

В параметрах конфигурации, набор "show_sql" свойство к истинному. Это заставит SQL быть произведенным в любезности файлов журнала NHIBERNATE log4net.

17
ответ дан Ian Nelson 5 August 2019 в 16:34
поделиться

Используйте профилировщика SQL-сервера.

РЕДАКТИРОВАНИЕ (1 год спустя): Как @Toran состояния Billups ниже, записал профилировщик NHibernate Ayende, очень очень прохладно.

6
ответ дан Iain Holder 5 August 2019 в 16:34
поделиться

Существует хорошая ссылка для NHibernate, регистрирующегося в: , Как настроить Log4Net для использования с NHibernate. Это включает информацию о входе всех NHibernate-сгенерированных SQL-операторов.

3
ответ дан Sean Carpenter 5 August 2019 в 16:34
поделиться

Вы также можете попробовать NHibernate Profiler (30-дневная пробная версия). Это лучший инструмент IMHO.

Он не только покажет сгенерированный SQL, но и предупреждения / предложения / и т.д.

5
ответ дан 27 November 2019 в 01:27
поделиться

Nhibernate Profiler - вариант, если вам нужно сделать что-нибудь серьезное.

1
ответ дан 27 November 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: