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.