将List对象转换为List Long

时间:2014-08-21 19:36:09

标签: java jpa jpql

我遇到一个问题,我无法将对象列表转换为数字列表

public List<Long> sommeClassesRep(Choix choix) {

    Query q1xx = em.createQuery("SELECT SUM(h.nb1xx),  SUM(h.nb2xx),SUM(h.nb3xx),SUM(h.nb4xx),SUM(h.nb5xx) FROM HttpEntity h WHERE h.host = :host and h.date_http BETWEEN to_date(:startDate,'dd/mm/yyyy HH24:mi:ss') AND to_date(:endDate,'dd/mm/yyyy HH24:mi:ss')");

    q1xx.setParameter("host",choix.getHost() );
    q1xx.setParameter("startDate", convert.convertDateTime(choix.getStartdate()) );
    q1xx.setParameter("endDate", convert.convertDateTime(choix.getEndDate()));

    List<BigDecimal[]> listSomme = new ArrayList<BigDecimal[]>();
    listSomme =  (List<BigDecimal[]>) q1xx.getResultList();

    List<Long> listSomme =   (List<Long>) q1xx.getResultList();
    List<Long>  listResultat = new ArrayList<Long>();

    for (BigDecimal[]  obj: listSomme ){

        listResultat.add(( obj[0]).longValue());
        listResultat.add(( obj[1]).longValue());
        listResultat.add(( obj[2]).longValue());
        listResultat.add(( obj[3]).longValue());
        listResultat.add(( obj[4]).longValue());
    }

    return listResultat;

}

当我调试时,我在列表的第一个单元格中显示查询的结果,但是一个服务器错误,它无法将对象转换为数字

请帮忙 感谢

2 个答案:

答案 0 :(得分:2)

解决方案是这样的:

public List<Long> sommeClassesRep(Choix choix) {

    Query q1xx = em.createQuery("SELECT SUM(h.nb1xx),  SUM(h.nb2xx),SUM(h.nb3xx),SUM(h.nb4xx),SUM(h.nb5xx) FROM HttpEntity h WHERE h.host = :host and h.date_http BETWEEN to_date(:startDate,'dd/mm/yyyy HH24:mi:ss') AND to_date(:endDate,'dd/mm/yyyy HH24:mi:ss')");

    q1xx.setParameter("host",choix.getHost() );
    q1xx.setParameter("startDate", convert.convertDateTime(choix.getStartdate()) );
    q1xx.setParameter("endDate", convert.convertDateTime(choix.getEndDate()));

    Object[] listSomme = (Object[]) q1xx.getSingleResult();

    Long[] longArr = Arrays.copyOf(listSomme, listSomme.length, Long[].class);
    List<Long> listResultat = Arrays.asList(longArr);

    return listResultat;
}

说明:

在开始之前,我不知道每个值的声明类型:nb1xx,nb2xx,nb3xx,nb4xx,nb5xx。因此,为了便于解释,我假设所有这些都被声明为Long

我从q1xx.getResultList更改为q1xx.getSingleResult,因为您的查询只返回一行。 该行将是一个对象数组,因此我将listSomme定义为Object[]

如果要返回Long列表,可以将Object数组的副本创建为Long数组(假设它们都是Long类型),然后将数组转换为列表。

如果总和不是Long的类型(比如说BigDecimal),那么你可以这样做:

Object[] listSomme = (Object[]) q1xx.getSingleResult();

List<Long> listResultat = new ArrayList<Long>();
listResultat.add(((BigDecimal)listSomme[0]).longValue());
listResultat.add(((BigDecimal)listSomme[1]).longValue());
listResultat.add(((BigDecimal)listSomme[2]).longValue());
listResultat.add(((BigDecimal)listSomme[3]).longValue());
listResultat.add(((BigDecimal)listSomme[4]).longValue());

return listResultat;

答案 1 :(得分:0)

我有一些担忧:

List<BigDecimal[]> listSomme = new ArrayList<BigDecimal[]>();
listSomme =  (List<BigDecimal[]>) q1xx.getResultList();

List<Long> listSomme =   (List<Long>) q1xx.getResultList();

您有2个相同类型但有2种不同泛型类型的变量。另外,为什么您的查询会返回List<BigDecimal>List<Long>