Каковы преимущества использования именованных запросов в Hibernate Annotation - PullRequest
4 голосов
/ 09 сентября 2009

Есть ли преимущества использования именованных запросов по сравнению с тем, что мы имеем? Смотря на производительность, удобство использования, ремонтопригодность и т. Д. И т. Д.

В нашем приложении мы определили наши запросы так:

private static final String SELECT_CODE_FOR_STORE = "select DISTINCT code from Code code "
        + "join code.codeDescriptions codeDesc "
        + "join codeDesc.stores store where store.id =:"
        + DataAccessConstants.PARAM_STORE_ID;

(Все они помещены в объект DAO, и их много.)

И мы вызываем вышеупомянутое с помощью:

Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("storeId", codeDescriptionSearchCriteria.getStoreId());
List<Code> list = getJpaTemplate().findByNamedParams(
        SELECT_CODE_FOR_STORE, paramMap);
return list; 

Что не более, чем:

public List findByNamedParams(final String arg0, 
                              final Map<String, 
                              ? extends Object> arg1) throws DataAccessException 
{
  return org.springframework.orm.jpa.JpaTemplate.findByNamedParams(arg0, arg1);
}

По сравнению с использованием

@NamedQuery(name="SELECT_CODE_FOR_STORE", query="select ......")

A вершина наших объектов DAO.

Я видел эту публикацию , которая, кажется, является хорошим способом организовать все эти запросы. Или, может быть, пришло время пересмотреть нашу базу данных и объектные структуры, если у нас так много запросов такого типа.

Ответы [ 2 ]

5 голосов
/ 09 сентября 2009

Я использую второй подход в вопросе, на который вы ссылаетесь (именованные запросы со строковыми константами). Основным преимуществом использования именованных запросов является то, что Hibernate анализирует запросы при запуске, поэтому любые ошибки будут обнаружены быстро.

Что касается вашего общего подхода, я бы определенно поставил под сомнение модель вашего домена, если вам часто нужны именованные запросы. Для некоторых приложений это необходимо, но, возможно, стоит взглянуть на замену соединений с отложенной загрузкой в ​​сущностях. Также обратите внимание на использование запроса hobernate в качестве примера и критериев, поскольку они также могут уменьшить использование именованных запросов объектно-ориентированным способом.

0 голосов
/ 17 октября 2013

Именованные запросы улучшают производительность приложения, поскольку они готовятся один раз, и они (и все связанные с ними вспомогательные объекты) могут впоследствии эффективно использоваться повторно, что делает их хорошо подходящими для сложных и часто выполняемых операций.

Другие способы настройки производительности см. Здесь (производительность jpa) и здесь (производительность Hibernate) на DZone .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...