Spring数据。获取自定义值select(非实体)

时间:2016-09-14 14:09:32

标签: spring spring-data spring-repositories hibernate-native-query

我有这个查询

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.有更简单的方法得到这个结果吗?

1 个答案:

答案 0 :(得分:0)

未经检查的警告是因为query.getResultList()返回的是无类型Collection而非Collection<MyDto>。如果您致电EntityManager方法之一而返回TypedQuery<T>而不是Query,则会清除该警告。 This SO answer对于@NamedNativeQueryEntityManager.createNamedQuery(name, class)一起使用 <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Width="25" Height="25" Source="{Binding ImagePath}" /> <TextBlock Text="{Binding RumNummer}" Margin="12,0,0,0" /> <TextBlock Text="{Binding Våning}" Margin="150,0,0,0" /> </StackPanel> </DataTemplate> </ListView.ItemTemplate> 有一些很好的指导。