How do I make an accountant come out as an object in my json?

0

This is my driver that I call it from a class called demand that I want to get the states counter for its id

@SuppressWarnings({ "rawtypes", "unchecked" })
        @CrossOrigin("http://localhost:8080")
        @RequestMapping(value = "countestado", method = RequestMethod.GET)
        public List<Demanda> listadoxcount() {
        //  String hql = " SELECT  d.Estado_Demanda.nombre ,  con   cat(COUNT(d.Estado_Demanda.id) as total ,'-' ,d.Estado_Demanda.nombre )  FROM Demanda d  group by d.Estado_Demanda.id  ";
            String hql = " SELECT  d.Estado_Demanda.nombre , COUNT(d.Estado_Demanda.id) as total \r\n" + 
                    "FROM Demanda d \r\n" +  
                    "GROUP BY d.Estado_Demanda.id \r\n" + 
                    "HAVING COUNT(d.Estado_Demanda.id) > 4";

            return EntityManager.createQuery(hql).getResultList()   ;
                    }

Here is where I have my class bean, entity or model as you know

  @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_demanda")
    private int id;

    @ManyToOne
    @JoinColumn(name = "id_personas", referencedColumnName = "id")
    private Persona personas;

    @ManyToOne
    @JoinColumn(name = "id_estado_demanda", referencedColumnName = "id")
    private Estado_Demanda Estado_Demanda;

    @Temporal(TemporalType.TIMESTAMP)
    @Column
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/mm/yyyy hh:mm:ss")
    private Date fecha_registro;

    @Column
    private String comentario;

    @Column
    private String descripcion;

    @Temporal(TemporalType.TIMESTAMP)
    @Column
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/mm/yyyy hh:mm:ss")
    private Date fecha_entregada_solicitada;

    @Temporal(TemporalType.TIMESTAMP)
    @Column
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy hh:mm:ss")
    private Date fecha_entrega_comprometida;

    @ManyToOne
    @JoinColumn(name = "id_tipo_prioridad", referencedColumnName = "id")
    private Tipo_prioridade tipo_prioridade;

    @Column
    private int urgente;

    @ManyToOne
    @JoinColumn(name = "id_tipo_trama", referencedColumnName = "id")
    private Tipo_trama tipo_trama;

    @ManyToOne
    @JoinColumn(name = "id_tipo_capa_red", referencedColumnName = "id")
    private Tipo_capa_red tipo_capa_red;

    @ManyToOne
    @JoinColumn(name = "id_frame_rate", referencedColumnName = "id")
    private FrameRate frameRate;

    @ManyToOne
    @JoinColumn(name = "id_elemento_red_origen", referencedColumnName = "id")
    private Elemento_red elemento_origen;

    @Column
    private String interfaz_ip_origen;

    @ManyToOne
    @JoinColumn(name = "id_elemento_red_destino", referencedColumnName = "id")
    private Elemento_red elemento_destino;

    @Column
    private String interfaz_ip_destino;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "id_demanda", referencedColumnName = "id_demanda")
    private List<FlujoDemanda> flujoDemandas;

//Getters and Setters de Demanda

//Estado_demanda entidad
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@Column
private String nombre;

@Column
private int activo;

and this is where I have the result of my json

[
  [
    "cancelada",
    254
  ],
  [
    "en proceso",
    109
  ],
  [
    "entregada",
    574
  ],
  [
    "registrada",
    476
  ],
  [
    "cerrrado",
    5
  ]
]
    
asked by Sebastian Cordova 02.02.2018 в 21:41
source

2 answers

0

Try using entity attributes with @Formula

@Formula(“COUNT(Estado_Demanda)“)
private int count;

public getCount(){  return count }
    
answered by 02.02.2018 / 23:43
source
0

You can return a simple POJO as a result of a query, as specified in the JPA specification

SELECT NEW com.company.PublisherInfo(pub.id, pub.revenue, mag.price)
    FROM Publisher pub JOIN pub.magazines mag WHERE mag.price > 5.00

This way your query would be:

String hql = " SELECT  NEW com.ejemplo.Contador(d.Estado_Demanda.nombre , COUNT(d.Estado_Demanda.id))" + 
                " FROM Demanda d " +  
                " GROUP BY d.Estado_Demanda.id " + 
                " HAVING COUNT(d.Estado_Demanda.id) > 4";

return EntityManager.createQuery(hql).getResultList();

Keeping in mind that you must create a constructor with those parameters for your POJO.

class Contador {
    private String nombre;
    private long cantidad;
    public Contador(String nombre, long cantidad){
        this.nombre = nombre;
        this.cantidad = cantidad;
    }
}
    
answered by 03.02.2018 в 00:52