Создать новый NamedQuery или построить новый список, чтобы вернуть значения полей? - PullRequest
2 голосов
/ 15 июля 2011

Как правило, лучше написать новый NamedQuery, который выбирает поле,

@NamedQuery(name="getEntityField",
            query="select e.field from Entity e where <condition>")

или следует select e from Entity... и затем создать новый список?

List<Entity> entities = query.getResultList();
List<Object> fields = new ArrayList<Object>();
for (Entity e : entities) {
    fields.add( e.getField() );
}

Если один из этих шаблонов лучше, то почему?

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Когда вы делаете это с NamedQuery, базе данных нужно только отправить список с содержимым этого поля обратно в приложение, а не полные сущности (все столбцы таблицы).

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

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

Что работает лучше всего, зависит от ситуации в вашем приложении и используемой вами платформы ORM. Попробуйте оба метода, позвольте своей структуре ORM регистрировать, что она делает, и просматривайте журнал, чтобы увидеть, что он делает, и определить, что лучше для вашего конкретного приложения.

0 голосов
/ 15 июля 2011

Использование именованного запроса делает более явным, какие у вас запросы. Например. для последующего обслуживания. Лично мне не нравится, если строки SQL строятся повсюду на «бизнес-уровне», который мне нравится использовать в компонентах.

...