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

但我有错误unchecked

我的问题 1. 我该如何解决这个错误以及这个错误意味着什么?2.有没有更简单的方法得到这个结果?

4

1 回答 1

0

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

于 2016-09-14T14:55:04.103 回答