Как сопоставить нативный запрос с одним классом модели? - PullRequest
0 голосов
/ 02 декабря 2010

Привет! Я использую 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-запроса. В любом случае, просто добавить его в мою модель логинов?

1 Ответ

1 голос
/ 02 декабря 2010

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

Почему бы просто не вернуть значения рядом с сущностью, так же, как и в случае запроса JPQL, такого как: "Выберите l, подзапрос1, подзапрос2 из логинов l", т. Е.:

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

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

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

С наилучшими пожеланиями, Крис

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