标准和投影

时间:2016-03-13 16:37:16

标签: java spring hibernate hibernate-criteria

我尝试对一列进行求和,但是我得到一个空指针异常,我不知道自己做错了什么。

ChartVentaVendedores chart = new ChartVentaVendedores();
Criteria facturas = getSession().createCriteria(Factura.class);
facturas.add(Restrictions.like("estado", "CONFIRMADO"));
facturas.add(Restrictions.between("fechaCreacion", fromDate, toDate));

Criteria vendedorFactura = facturas.createCriteria("idVendedor");
vendedorFactura.add(Restrictions.eq("idUsuario", idVendedor));
facturas.setProjection(Projections.sum("total"));

Long counter = (Long) facturas.uniqueResult();
int value = counter.intValue();
chart.setValue(counter.intValue());            
chart.setDate(fromDate);

即使我没有加入,我仍然会得到null

我尝试将Long counter = (Long) facturas.uniqueResult();的类型更改为BigInteger,但我仍然遇到同样的错误。

我的课程:

@Entity
@Table(name = "factura")
public class Factura implements Serializable {

    private int idFactura;
    private Cliente cliente;
    private String estado;
    private Usuarios idVendedor;
    private Date fechaCreacion;
    private Date fechaModificacion;
    private Integer usuarioCreacion;
    private Integer usuarioModificacion;
    private BigInteger total;
    private String tipoFactura;

    ....
}

2 个答案:

答案 0 :(得分:1)

我认为,Projections.sum("total")无法加BigInteger,因为它没有自动装箱。

如果可以,请尝试将BigInteger更改为IntegerLong

答案 1 :(得分:0)

试过这个来总结一个h2 db中的城市ID,根据需要总结。

Criteria vendedorFactura = HibernateUtil.getSession().createCriteria(City.class);
        vendedorFactura.add(Restrictions.eq("name", city.getName()));
        vendedorFactura.setProjection(Projections.sum("id"));
        Long counter = (Long) vendedorFactura.uniqueResult();
        System.out.println("Counter:"+counter);

Counter:1161 ( Sum of 1 33 65 97 129 161 193 225 257)