Состояние базы данных при смешивании HQL с собственным SQL в Hibernate - PullRequest
4 голосов
/ 04 ноября 2011

В своем коде базы данных я использую некоторые собственные SQL-запросы Hibernate (вставки, удаление, обновления). Я понимаю, что когда я использую HQL и кеш включен, состояние БД стабильно всякий раз, когда я вызываю БД с помощью HQL. Однако мне интересно, что произойдет, если я использую нативные SQL-запросы, например, Я вставляю некоторые данные (но не фиксирую их) и затем пытаюсь получить некоторые данные с помощью запроса HQL. Я тоже получу вставленные данные?

Любые намеки?

Ответы [ 3 ]

0 голосов
/ 20 октября 2013

Добавляя к ответу Константина Приблуды, я могу сказать, что в обратной ситуации: добавление данных через Hibernate (даже с помощью session.save ()), а затем выборка данных с помощью собственного SQL приводило к тому, что собственный SQL-запрос не извлекал добавленные данные.

Таким образом, при использовании различных типов запросов в DAO, я всегда сначала очищаю сеанс, прежде чем использовать собственный запрос SQL ... Никогда не знаешь, какой метод смешивается на уровне Service.

0 голосов
/ 20 октября 2013

Да, вы получите его, потому что все ваши запросы DAO будут выполняться один за другим, будь то HQL или SQL. Таким образом, если запрос вставки является первым по порядку, то вы получите вставленные записи.

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

Я бы сказал, что это зависит от базовой базы данных и настроек транзакций. Но даже HQL переводится на нативный SQL и выполняется. Пока вы находитесь в одной транзакции, вы сможете загружать изменения, сделанные с помощью собственного SQL, через HQL. Но имейте в виду, что HQL-запросы, взаимодействующие с кешами, прокси-серверами и другими вещами с гибернацией - могут быть некоторые странные проблемы, потому что natiev SQL полностью обходит это (это цель нативных запросов - быстрая переброска всех вещей гибернации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...