0

Je cette requêteDonnées de ressort. obtenir des valeurs personnalisées, sélectionnez (non entité)

String query = "select ig.p1, 
     ig.p2, 
     ig.p3, 
     tg.p4 
    from mytable ig, mytable2 tg 
where ..... and ...."; 

Et je DTO

public class MyDto{ 
//constructor 
private String p1; 
private String p2; 
private String p3; 
private String p4; 
... 
//getters/setters 
} 

Je dois obtenir cette sélection et la cartographie de DTO.

-je créer dans mon DTO

@SqlResultSetMapping(
     name="findReport", 
     classes={ 
       @ConstructorResult(
         targetClass=MyDto.class, 
         columns={ 
           @ColumnResult(name="p1",type = String.class), 
           @ColumnResult(name="p2", type = String.class), 
           @ColumnResult(name="p3", type = String.class), 
           @ColumnResult(name="p4", type = String.class), 
         } 
       ) 
     } 
) 

Et créer DAO/Repository

@Component 
public class ReportRepositoryImpl implements ReportRepository { 
    @PersistenceContext 
    private EntityManager em; 

    @Override 
    public Report findReportSelect() { 
     Query query = em.createNativeQuery(
       "query","findReport"); 
     @SuppressWarnings("unchecked") 
     Collection<MyDto> dto = query.getResultList(); 

     Iterable<MyDto> itr = dto; 
     return (MyDto)itr; 
    } 
} 

Mais je erreur unchecked

Mes quations 1. Comment puis-je corriger cette erreur et que signifie cette erreur? 2. Y a-t-il un moyen plus facile d'obtenir ce résultat?

Répondre

0

L'avertissement non vérifié est dû au fait que query.getResultList() renvoie un Collection non typé au lieu de Collection<MyDto>. Si vous appelez l'une des méthodes EntityManager qui renvoie un TypedQuery<T> au lieu de Query, il effacera cet avertissement. This SO answer a quelques bons conseils pour utiliser @NamedNativeQuery avec EntityManager.createNamedQuery(name, class) pour accomplir cela.