如何将本机查询映射到一个模型类?

时间:2010-12-02 17:21:36

标签: java jpa persistence eclipselink

您好我正在使用Eclipselink,我做了一个原生查询来选择2个表的一些字段。我将表Logins映射到模型类中。我不想映射我的表“B”因为我的sql结果只需要这个表的2个字段..我可以将我的Logins表中的这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)

我确实映射了Logins表,我想将s.lugarcerto和s.vrum映射到我的SQL查询结果。 无论如何只需将它添加到我的Logins模型中?

1 个答案:

答案 0 :(得分:1)

对于您希望将这些值放入的属性进行映射,并且不会导致在实体中缓存​​它们的问题。

为什么不直接返回实体旁边的值,就像使用JPQL查询一样,例如:“从登录l中选择l,subquery1,subquery2”,即:

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

在实体中,包含注释:

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

最诚挚的问候, 克里斯