Можно ли использовать @NamedQuery
более @NamedNativeQuery
в спящем или наоборот.
Я не могу определить точную разницу или
в этом контексте мы должны использовать @NamedQuery
над @NamedNativeQuery
Спасибо заранее.
Можно ли использовать @NamedQuery
более @NamedNativeQuery
в спящем или наоборот.
Я не могу определить точную разницу или
в этом контексте мы должны использовать @NamedQuery
над @NamedNativeQuery
Спасибо заранее.
@NamedNativeQuery
позволяет писать именованный запрос SQL, а @NamedQuery
позволяет писать именованный запрос HQL (или JPQL).
В общем, вы должны предпочесть писать запросы HQL, потому что тогда вы можете позволить Hibernate обрабатывать тонкости преобразования HQL в различные диалекты SQL. Это значительно упростит вашу работу, если вы решите переключить поставщиков СУБД.
Когда вы занимаетесь выступлением, вы должны знать что-то о том, что происходит под капотом.
Возможно, вы запрограммировали что-то, используя простой JDBC, поэтому вы знаете, как делать запросы получить переданный драйвер и отправить в базу данных. При использовании HQL или JPA-QL запросы сначала для анализа в SQL-язык, который может понять база данных. В этом случае у нас есть дополнительная шаг анализа между ними. Обратите внимание, что собственные SQL-запросы, включая вызовы хранимых процедур, постоянство Framework по-прежнему заботится о сопоставлении наборов результатов JDBC с графиками постоянных объектов.
Если вы хотите включить собственный подсказку SQL, чтобы проинструктировать оптимизатор запросов к системам управления базами данных, например, вам нужно написать SQL самостоятельно. В HQL и JPA-QL для этого нет ключевых слов.
Недостатком размещения собственного SQL в ваших метаданных сопоставления является потеряемость переносимости базы данных, поскольку ваши сопоставления и, следовательно, ваше приложение, будут работать только для конкретной базы данных. Но обычно это что вы, вероятно, не создаете структуру, которая должна работать с каждой базой данных.
Если вы хотите отстать от производительности вашего запроса, вам действительно нужно проконсультироваться с базой данных и посмотрите план выполнения. Администратор базы данных может точно сказать, что хорошо и что можно оптимизировать.
@NamedQuery
должен быть построен с языком запросов (язык запросов HQL или язык запросов). @NamedNativeQuery
должен быть построен с использованием собственного SQL.