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)來實現這一點有一些很好的指導。