Давайте сосредоточимся на том, что произойдет, если вы не будете использовать транзакции. Обычно, но не обязательно, закрывать сеанс в конце обработки, но до того, как вы начнете читать данные (т. Е. Представление). Этот метод распространяется под термином « Open Session in View » (хотя он, очевидно, имеет шаблон для предотвращения чтения перед закрытием). Этот шаблон часто используется в веб-приложении, где сеанс открывается, когда запрос поступает и закрывается непосредственно перед записью в поток ответов.
(N) Hibernate нужен сеанс и транзакция. Когда вы читаете без использования явной транзакции, транзакция будет настроена для вас. Когда вы читаете после фиксации транзакции, поведение зависит от конфигурации NH и драйвера.
И ODBC, и JDBC не определяют, что происходит, когда соединение закрыто, и есть незафиксированные или неподтвержденные данные. Когда соединение открывается, возможно, новая транзакция запускается автоматически.
Использование нетранзакционного доступа может использоваться только вместе с установкой auto-commit
явно в конфигурации NHibernate. Если нет, используется драйвер по умолчанию, и он может работать или не работать.
Короче говоря, есть много недостатков и неопределенного поведения, когда вы не используете транзакции при чтении. Это будет работать часто, но это зависит от конфигурации, применяемых шаблонов, драйверов. Существует большая вероятность, что вы получите LazyInitializationException
s, что является обычным результатом чтения после принятия без открытия новой транзакции.
«Лучшая практика» - использовать одну транзакцию для чтения / записи, а другую - только для чтения. Это кратко описано в предыдущей ссылке, раздел «Могу ли я использовать две транзакции в сеансе», но требует большей реализации.
Это не только «использовать транзакции для чтения», но и «использовать ту же транзакцию, которую вы используете для записи для чтения». (а затем, хотя это и так, фактическое приложение будет зависеть от ваших текущих шаблонов, количества уровней, кэширования и конфигурации).
Обновление: немного расширено, устранены некоторые неопределенности