2015-10-20 2 views
27

В чем разница между запросом, собственным запросом, именованным запросом и типизированным запросом? Существует ли только «постоянный» запрос, или это просто аббревиатура? На мой взгляд, собственный Query - это запрос, написанный в простом sql, тогда как именованный запрос относится к объектам (hibernate-mapping). Может кто-нибудь объяснить это кратко?Разница между запросом, нативным запросом, именованным запросом и типизированным запросом

ответ

29

Запрос

Запрос относится к JPQL/HQL запрос с синтаксисом, аналогичным SQL обычно используется для выполнения инструкций DML (операции CRUD).

В JPA вы можете создать запрос, используя entityManager.createQuery(). Вы можете посмотреть в API для более подробной информации.

В Hibernate, вы используете session.createQuery() "

NativeQuery

Native запрос относится к реальным запросам SQL (имеется в виду реальных объектов базы данных). Эти запросы являются операторы SQL, которые могут быть непосредственно выполнены в базе данных с использованием клиента базы данных.

JPA: entityManager.createNativeQuery() Hibernate (Вне-JPA): session.createSQLQuery()

NamedQuery

Подобно тому, как константа определена. NamedQuery - это то, как вы определяете свой запрос, указав ему имя. Вы можете определить это в файле сопоставления в спящем режиме, а также использовать аннотации на уровне сущности.

TypedQuery

TypedQuery дает возможность упомянуть тип объекта при создании запроса и поэтому любая операция после этого не требуется явное приведение к предполагаемому типу. Принимая во внимание, что обычный API Query не возвращает точный тип объекта, который вы ожидаете, и вам нужно выполнить бросок.

+0

Есть ли производительность, пропускная способность, потребление памяти, загрузка различий между серверами разных серверов? Я думаю, что потребление памяти NamedQuery больше, чем запрос, но я не могу сказать, где предел запросов, чтобы выбрать тот или иной. Могли бы вы объяснить? заранее спасибо – Joe

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