2010-12-02 42 views
0

Salut, j'utilise Eclipselink et j'ai fait une requête native pour sélectionner des champs de 2 tables. J'ai mappé ma table Logins dans une classe de modèle. Je ne voudrais pas ma carte "B" parce que j'ai besoin de seulement 2 champs de cette table sur mon résultat sql. Puis-je mapper ces 2 champs dans ma table Logins à mon résultat sql?Comment faire correspondre une requête native à une classe de modèle?

Mon sql est la suivante:

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)

Je l'ai carte Logins table et je veux la carte s.lugarcerto et s.vrum à mon résultat de la requête SQL. De toute façon, il suffit de l'ajouter à mon modèle Logins?

Répondre

1

Non sans avoir des mappages pour les attributs que vous souhaitez que ces valeurs mettent, et non sans causer des problèmes avec eux étant mis en cache dans l'entité.

Pourquoi ne pas simplement renvoyer les valeurs à côté de l'entité, comme vous le feriez avec une requête de JPQL tels que: « Sélectionner l, subquery1, subquery2 de Logins l », à savoir:

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

Et dans l'entité, inclure l'annotation:

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

Cordialement, Chris