2017-01-30 7 views
0

Я работаю над проектом, в котором есть много операций readonly (как в select), написанных с помощью подготовленных операторов, но другие операции с транзакциями спящего режима. Я знаю причину транзакции, потому что это somesort отказоустойчивости, если вы делаете несколько изменений в базе данных. Поэтому, если один из них не удается, происходит откат транзакции. Но я не знаю, что лучше всего использовать для операций readonly: когда я должен использовать подготовленный оператор для транзакций спящего режима и наоборот?JDBC подготовленный оператор vs hibernate сеанс транзакции readonly операции

ответ

1

Подготовленные отчеты и транзакции имеют разные области применения.

Вы должны использовать подготовленные операторы для предотвращения SQL-инъекций и сделать ваш код более читаемым, безопасным и многоразовым.

Вы используете транзакции для управления транзакцией (фиксация и откат), установите тайм-ауты, уровни изоляции и блокировки.

Конечно, вы должны использовать оба варианта при необходимости.

Может быть, вы найдете полезным это ссылку:

Transactions for read-only DB access?

Advantages of using prepared statements over normal mysqli statements?

0

Я не совсем уверен, что я согласен с использованием сырого JDBC PreparedStatement только для чтения SELECT операций и делегата Hibernate для всего остальное. Hibernate способен поддерживать как собственные SQL-запросы, так и операции чтения.

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

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

Помимо этого, он также позволяет использовать весь код, который генерирует запросы, которые будут более согласованными. Вы всегда взаимодействуете с Hibernate и выбираете, использовать ли исходный SQL-код или нет. Вы даже можете уйти от родного SQL и просто использовать HQL/JPQL, чтобы приложение стало менее зависимым от базы данных и более агностичным.