Подтвердить что ты не робот

@NamedQuery over @NamedNativeQuery

Можно ли использовать @NamedQuery более @NamedNativeQuery в спящем или наоборот. Я не могу определить точную разницу или в этом контексте мы должны использовать @NamedQuery над @NamedNativeQuery

Спасибо заранее.

4b9b3361

Ответ 1

@NamedNativeQuery позволяет писать именованный запрос SQL, а @NamedQuery позволяет писать именованный запрос HQL (или JPQL).

В общем, вы должны предпочесть писать запросы HQL, потому что тогда вы можете позволить Hibernate обрабатывать тонкости преобразования HQL в различные диалекты SQL. Это значительно упростит вашу работу, если вы решите переключить поставщиков СУБД.

Ответ 2

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

Возможно, вы запрограммировали что-то, используя простой JDBC, поэтому вы знаете, как делать запросы получить переданный драйвер и отправить в базу данных. При использовании HQL или JPA-QL запросы сначала для анализа в SQL-язык, который может понять база данных. В этом случае у нас есть дополнительная шаг анализа между ними. Обратите внимание, что собственные SQL-запросы, включая вызовы хранимых процедур, постоянство Framework по-прежнему заботится о сопоставлении наборов результатов JDBC с графиками постоянных объектов.

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

Недостатком размещения собственного SQL в ваших метаданных сопоставления является потеряемость переносимости базы данных, поскольку ваши сопоставления и, следовательно, ваше приложение, будут работать только для конкретной базы данных. Но обычно это что вы, вероятно, не создаете структуру, которая должна работать с каждой базой данных.

Если вы хотите отстать от производительности вашего запроса, вам действительно нужно проконсультироваться с базой данных и посмотрите план выполнения. Администратор базы данных может точно сказать, что хорошо и что можно оптимизировать.

Ответ 3

@NamedQuery должен быть построен с языком запросов (язык запросов HQL или язык запросов). @NamedNativeQuery должен быть построен с использованием собственного SQL.