Как сопоставить собственный запрос с одним классом модели?

Привет, я использую Eclipselink и сделал собственный запрос, чтобы выбрать некоторые поля из 2 таблиц. Я сопоставил свои логины таблицы в классе модели. Я не хотел бы сопоставлять свою таблицу «B», потому что мне нужно только 2 поля этой таблицы в моем результате sql. Могу ли я сопоставить эти 2 поля в моей таблице логинов с моим результатом sql?

Мой sql таков:

select l.login_id, s.lugarcerto,s.vrum, l.username, l.first_name, l.last_name, l.phone, l.fax_number, l.address, l.zip, 
          l.address2 as 'birth_date', l.city as 'cpf_cnpj'
from Logins l
join (select se.login_id, lugarcerto = min(case when se.service = 'IM' then '1' end), vrum = min(case when se.service = 'VE' then '1' end)
        from (select distinct ad.login_id, substring(ap.Rate_code,(CHARINDEX('-', ap.Rate_code)+1),2) as 'service'
                from Ad_Data.dbo.ad ad
                join Ad_Data.dbo.ad_pub ap on (ad.ad_id = ap.ad_id)
               where ap.ad_type =1) se
       group by se.login_id) s on (s.login_id = l.login_id)

Я сопоставил таблицу логинов и хочу сопоставить s.lugarcerto и s.vrum с результатом моего SQL-запроса. В любом случае, просто добавить его в мою модель входа в систему?


person Felipe    schedule 02.12.2010    source источник


Ответы (1)


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

Почему бы просто не вернуть значения рядом с сущностью, как если бы вы делали это с запросом JPQL, например: «Выберите l, subquery1, subquery2 from Logins l», т.е.:

 Query q = em.createNativeQuery(yourQueryString, "resultMappingName");

И в сущности включите аннотацию:

@SqlResultSetMapping(name="resultMappingName",
entities={@EntityResult(entityClass=com.acme.Logins.class, )},
columns={@ColumnResult(name="LUGARCERTO"), @ColumnResult(name="VRUM")}
)

С уважением, Крис

person Chris    schedule 02.12.2010