0

我有这个疑问春季数据。获取自定义值选择(没有实体)

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

而且我有DTO

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

我需要得到这个选择和映射到DTO。

我在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), 
         } 
       ) 
     } 
) 

,创造DAO /库

@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; 
    } 
} 

创建,但我有错误unchecked

我quations 1.我怎样才能解决这个错误,这个错误意味着什么? 2.有没有更简单的方法得到这个结果?

回答

0

未经检查的警告是因为query.getResultList()返回一个无类型Collection而不是Collection<MyDto>。如果您致电EntityManager方法之一,则返回TypedQuery<T>而不是Query它将清除该警告。 This SO answer对于使用@NamedNativeQueryEntityManager.createNamedQuery(name, class)来实现这一点有一些很好的指导。