Примеры собственных запросов SQL в Hibernate

Hibernate нативные примеры SQL-запросов

В Hibernate запросы HQL или критериев должны позволять вам выполнять практически любой запрос SQL. Однако многие разработчики жалуются на то, что сгенерированный оператор Hibernate является медленным и предпочитают создавать собственные операторы SQL (native SQL).

Пример собственных SQL-запросов

Hibernate предоставляет методcreateSQLQuery, позволяющий напрямую вызывать собственный оператор SQL.

1. В этом примере вы сообщаете Hibernate вернуть вам Stock.class, все выбранные данные (*) будут автоматически соответствовать вашим свойствам Stock.class.

Query query = session.createSQLQuery(
"select * from stock s where s.stock_code = :stockCode")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();

2. В этом примере Hibernate вернет вам массив объектов.

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

В качестве альтернативы вы также можете использоватьnamed query для вызова собственного оператора SQL. См.Hibernate named query examples here.

Сгенерированный оператор SQL в Hibernate работает медленно!

Я не согласен с утверждением «Сгенерированный SQL-оператор Hibernate работает медленно». Часто я обнаруживал, что это происходит из-за того, что разработчики не очень хорошо понимают взаимосвязь таблиц, и сделали некоторые неправильные отображения таблиц или неправильно использовали стратегии выборки. Это приведет к тому, что Hibernate сгенерирует некоторые ненужные операторы SQL или объединит некоторые ненужные таблицы ... И разработчики любят использовать это оправдание и создавать свои собственные операторы SQL, чтобы быстро исправить ошибку, и не знают, что основная проблема вызовет еще больше ожидающих ошибок.

Заключение

Я допускаю, что когда-нибудь нативный SQL-оператор действительно более удобен и прост, чем HQL, но подумайте, зачем вам нативный SQL-оператор? Это действительно Hibernate не может это сделать? Если да, то вперед ~

P.S In Oracle database, i more prefer to use native SQL statement in many critical performance queries, because i need to put the “hint” to improve the Oracle query performance.