как создать спящий запрос - PullRequest
3 голосов
/ 15 февраля 2011

Я посмотрел в Интернете и не могу найти четкого ответа на этот вопрос.

У меня есть две таблицы A и B. B - это потомок A. Мне нужно получить списокотличные атрибуты от B, основанные на некоторых ограничениях A.

Например:

SQL:

select distinct sirm.attribute
from store_item_received_material sirm
where sirm.store_item_id in (select si.id from store_item si where si.program_id = 9 and si.customer_id = 1 and si.date_processed is not null);

Конечно, SQL отлично работает.

Теперь мне нужно запустить это в моем проекте.

Я использую hibernate 3.3.1.Я попробовал следующее:

@NamedNativeQueries ({
    @NamedNativeQuery (name = "select.distinct.sirm.for.customer.program", query = "select distinct(sirm.attribute) as attribute from store_item_received_material as sirm where sirm.store_item_id in (select si.id from store_item as si where si.customer_id = ? and si.program_id = ? and si.date_processed is not null)")
})

Но это не удалось из-за следующей ошибки:

вложенное исключение - org.hibernate.cfg.NotYetImplementedException: чистые собственные скалярные запросы еще не поддерживаются

Итак, я попробовал следующее:

@NamedNativeQueries ({
    @NamedNativeQuery (name = "select.distinct.sirm.for.customer.program", query = "select distinct(sirm.attribute) as attribute from store_item_received_material as sirm where sirm.store_item_id in (select si.id from store_item as si where si.customer_id = ? and si.program_id = ? and si.date_processed is not null)", resultClass=StoreItemReceivedMaterial.class)
})
@SqlResultSetMapping(name = "select.distinct.sirm.for.customer.program", entities=@EntityResult(entityClass = StoreItemReceivedMaterial.class))

Но это тоже не работает, поскольку объект является объектом-сущностью и не имеет столбца идентификатора.

Итак, любая помощь вкак это сделать

1 Ответ

0 голосов
/ 15 февраля 2011

Для скалярных запросов необходимо сопоставление набора результатов с помощью @ColumnResult:

@NamedNativeQueries ({
    @NamedNativeQuery (name = "select.distinct.sirm.for.customer.program",
        query = "select distinct(sirm.attribute) as attribute from store_item_received_material as sirm where sirm.store_item_id in (select si.id from store_item as si where si.customer_id = ? and si.program_id = ? and si.date_processed is not null)", resultSetMapping = "select.distinct.sirm.for.customer.program" }) 

@SqlResultSetMapping(name = "select.distinct.sirm.for.customer.program",
    columns = @ColumnResult(name = "attribute"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...