2013-03-06 3 views
1

У нас есть функция saveOrUpdate(Object) в Hibernate, в то время как мы используем Session, и это проще, поскольку нам не нужно проверять, следует ли выполнять сохранение или обновление. но функции insert(Object) и update(Object) доступны только для сеанса без сохранения состояния, и мне нужно использовать сеанс без сохранения состояния, поскольку я иду с сотнями тысяч записей, а спящий режим сжигает память. Есть ли способ воспроизвести функциональность saveOrUpdate(Object) в сеансе бездействия. или в любом случае, используя Hql-запрос вместо использования объекта, чтобы сделать это через спящий режим.Запрос Hql, аналогичный SaveOrUpdate в спящем режиме

ответ

0

Согласно StatelessSession JavaDoc

без гражданства сессии не реализует кэш первого уровня, ни взаимодействовать с любым кэшем второго уровня, а также не осуществлять транзакционной записи за или автоматическую грязную проверку, а также операции каскада для связанных экземпляров. Коллекции игнорируются сеансом без сохранения. Операции, выполненные через сеанс без состояния обходной модели Hibernate и перехватчиков. Лица без сессий уязвимы к искажениям данных эффектов, из-за отсутствия кэш первого уровня

Он не поддерживает кэш первого уровня, следовательно, не знает текущее состояние объекта (Transient, Постоянный, Отдельный или Удаленный), следовательно, он не может принять сознательное решение. Вы можете запросить использование HQL, чтобы определить, существует ли та же самая запись в базе данных или нет, и вызвать соответствующий метод до insert() или update(). Но это дорого.

Если есть рекорды lakh для обновления или вставки, было бы лучше использовать базовый JDBC, а не спящий режим. Это решит вашу проблему с памятью.

+0

Спасибо за ответ. Я пытался найти способ сделать это через спящий режим, не производя память. в то время как я попытался использовать сеанс без сохранения состояния, я мог бы контролировать использование памяти. – Saif

Смежные вопросы