Retornando último registro do banco - JPA

7 respostas
J

Boa noite a todos!

Não to conseguindo o retorno do útlimo valor do banco.

Minha classe de entidade

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.app.com.classes;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Janson Ribeiro
 */
@Entity
@Table(name = "ordemservico")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Ordemservico.findAll", query = "SELECT o FROM Ordemservico o"),
    @NamedQuery(name = "Ordemservico.findByIdordemservico", query = "SELECT o FROM Ordemservico o WHERE o.idordemservico = :idordemservico"),
    @NamedQuery(name = "Ordemservico.findByIdentificadoros", query = "SELECT o FROM Ordemservico o WHERE o.identificadoros = :identificadoros"),
    @NamedQuery(name = "Ordemservico.findByMes", query = "SELECT o FROM Ordemservico o WHERE o.mes = :mes"),
    @NamedQuery(name = "Ordemservico.findByAno", query = "SELECT o FROM Ordemservico o WHERE o.ano = :ano"),
    @NamedQuery(name = "Ordemservico.findByAssunto", query = "SELECT o FROM Ordemservico o WHERE o.assunto = :assunto"),
    @NamedQuery(name = "Ordemservico.findByPublicitario", query = "SELECT o FROM Ordemservico o WHERE o.publicitario = :publicitario"),
    @NamedQuery(name = "Ordemservico.findByLayoutos", query = "SELECT o FROM Ordemservico o WHERE o.layoutos = :layoutos"),
    @NamedQuery(name = "Ordemservico.findByDataincio", query = "SELECT o FROM Ordemservico o WHERE o.dataincio = :dataincio"),
    @NamedQuery(name = "Ordemservico.findByDatafim", query = "SELECT o FROM Ordemservico o WHERE o.datafim = :datafim"),
    @NamedQuery(name = "Ordemservico.findByDataevento", query = "SELECT o FROM Ordemservico o WHERE o.dataevento = :dataevento"),
    @NamedQuery(name = "Ordemservico.findByProducao", query = "SELECT o FROM Ordemservico o WHERE o.producao = :producao"),
    @NamedQuery(name = "Ordemservico.findByResponsavelos", query = "SELECT o FROM Ordemservico o WHERE o.responsavelos = :responsavelos"),
    @NamedQuery(name = "Ordemservico.findByMateriajornal", query = "SELECT o FROM Ordemservico o WHERE o.materiajornal = :materiajornal")})
public class Ordemservico implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idordemservico")
    private Integer idordemservico;
    @Column(name = "identificadoros")
    private String identificadoros;
    @Column(name = "mes")
    private String mes;
    @Column(name = "ano")
    private String ano;
    @Column(name = "assunto")
    private String assunto;
    @Basic(optional = false)
    @Column(name = "publicitario")
    private String publicitario;
    @Basic(optional = false)
    @Column(name = "layoutos")
    private String layoutos;
    @Basic(optional = false)
    @Column(name = "dataincio")
    @Temporal(TemporalType.DATE)
    private Date dataincio;
    @Column(name = "datafim")
    @Temporal(TemporalType.DATE)
    private Date datafim;
    @Column(name = "dataevento")
    @Temporal(TemporalType.DATE)
    private Date dataevento;
    @Column(name = "producao")
    private String producao;
    @Lob
    @Column(name = "discricao")
    private String discricao;
    @Column(name = "responsavelos")
    private String responsavelos;
    @Column(name = "materiajornal")
    private String materiajornal;
    @ManyToMany(mappedBy = "ordemservicoList")
    private List<Ordemproducao> ordemproducaoList;
    @ManyToMany(mappedBy = "ordemservicoList")
    private List<Layoutsos> layoutsosList;
    @JoinTable(name = "ordemservico_has_usuario", joinColumns = {
        @JoinColumn(name = "ordemservico_idordemservico", referencedColumnName = "idordemservico")}, inverseJoinColumns = {
        @JoinColumn(name = "usuario_idusuario", referencedColumnName = "idusuario")})
    @ManyToMany
    private List<Usuario> usuarioList;
    @JoinColumn(name = "secretaria_idsecretaria", referencedColumnName = "idsecretaria")
    @ManyToOne(optional = false)
    private Secretaria secretariaIdsecretaria;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ordemservicoIdordemservico")
    private List<Materiajornal> materiajornalList;

    public Ordemservico() {
    }

    public Ordemservico(Integer idordemservico) {
        this.idordemservico = idordemservico;
    }

    public Ordemservico(Integer idordemservico, String publicitario, String layoutos, Date dataincio) {
        this.idordemservico = idordemservico;
        this.publicitario = publicitario;
        this.layoutos = layoutos;
        this.dataincio = dataincio;
    }

    public Integer getIdordemservico() {
        return idordemservico;
    }

    public void setIdordemservico(Integer idordemservico) {
        this.idordemservico = idordemservico;
    }

    public String getIdentificadoros() {
        return identificadoros;
    }

    public void setIdentificadoros(String identificadoros) {
        this.identificadoros = identificadoros;
    }

    public String getMes() {
        return mes;
    }

    public void setMes(String mes) {
        this.mes = mes;
    }

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
        this.ano = ano;
    }

    public String getAssunto() {
        return assunto;
    }

    public void setAssunto(String assunto) {
        this.assunto = assunto;
    }

    public String getPublicitario() {
        return publicitario;
    }

    public void setPublicitario(String publicitario) {
        this.publicitario = publicitario;
    }

    public String getLayoutos() {
        return layoutos;
    }

    public void setLayoutos(String layoutos) {
        this.layoutos = layoutos;
    }

    public Date getDataincio() {
        return dataincio;
    }

    public void setDataincio(Date dataincio) {
        this.dataincio = dataincio;
    }

    public Date getDatafim() {
        return datafim;
    }

    public void setDatafim(Date datafim) {
        this.datafim = datafim;
    }

    public Date getDataevento() {
        return dataevento;
    }

    public void setDataevento(Date dataevento) {
        this.dataevento = dataevento;
    }

    public String getProducao() {
        return producao;
    }

    public void setProducao(String producao) {
        this.producao = producao;
    }

    public String getDiscricao() {
        return discricao;
    }

    public void setDiscricao(String discricao) {
        this.discricao = discricao;
    }

    public String getResponsavelos() {
        return responsavelos;
    }

    public void setResponsavelos(String responsavelos) {
        this.responsavelos = responsavelos;
    }

    public String getMateriajornal() {
        return materiajornal;
    }

    public void setMateriajornal(String materiajornal) {
        this.materiajornal = materiajornal;
    }

    @XmlTransient
    public List<Ordemproducao> getOrdemproducaoList() {
        return ordemproducaoList;
    }

    public void setOrdemproducaoList(List<Ordemproducao> ordemproducaoList) {
        this.ordemproducaoList = ordemproducaoList;
    }

    @XmlTransient
    public List<Layoutsos> getLayoutsosList() {
        return layoutsosList;
    }

    public void setLayoutsosList(List<Layoutsos> layoutsosList) {
        this.layoutsosList = layoutsosList;
    }

    @XmlTransient
    public List<Usuario> getUsuarioList() {
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }

    public Secretaria getSecretariaIdsecretaria() {
        return secretariaIdsecretaria;
    }

    public void setSecretariaIdsecretaria(Secretaria secretariaIdsecretaria) {
        this.secretariaIdsecretaria = secretariaIdsecretaria;
    }

    @XmlTransient
    public List<Materiajornal> getMateriajornalList() {
        return materiajornalList;
    }

    public void setMateriajornalList(List<Materiajornal> materiajornalList) {
        this.materiajornalList = materiajornalList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idordemservico != null ? idordemservico.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Ordemservico)) {
            return false;
        }
        Ordemservico other = (Ordemservico) object;
        if ((this.idordemservico == null && other.idordemservico != null) || (this.idordemservico != null && !this.idordemservico.equals(other.idordemservico))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return  identificadoros ;
    }
    
    
    
    
    
}

Meu método para pegar esse último valor

public Ordemservico buscaridentificador(){
        EntityManager em = getEntityManager();
        String sql = "select max(u.identificadoros) from Ordemservico u ";
        Ordemservico u = null;
        try {
            u = (Ordemservico) em.createQuery(sql).getSingleResult();
            
        } catch (Exception e) {
            
            return null;          
        }
        return u;
   
    }


Ai aqui eu chamo ele e imprimo.

[code]

Ordemservico ordemserv = new OrdemservicoJpaController().buscaridentificador();

  System.out.println(ordemserv);

7 Respostas

alexfe

Tenta isso

Hebert_Coelho

se vc quer o último registro apenas vc tem que fazer:

  1. A consulta abaixo já ordena ao inverso
  1. Define que apenas um resultado deve ser retornado

Pronto.

O comando max(…) ele ñ traz um objeto, ele traz o valor máximo daquela coluna.

J
Hebert Coelho:
se vc quer o último registro apenas vc tem que fazer: 1) A consulta abaixo já ordena ao inverso
select a from Entidade a order by a.id desc
2) Define que apenas um resultado deve ser retornado
query.setMaxResults(1)

Pronto.

O comando max(...) ele ñ traz um objeto, ele traz o valor máximo daquela coluna.

Pois é, consegui resolver o problema, mas acabei descobrindo outro.

O parametro max sempre vai pegar o maior valor da tabela, e isso não server pra mim, pq o valor vai sempre resetar quando o mes virar.

Ai eu usei sua primeira sugestão, mas ta dando um erro no JPA, O jPA diz que retornou mais de um resultado, PElo meu método eu achei que ele só tava pegando um valor, mas msm assim tá dando erro, segue o método abaixo.

Esse é o erro: "More than one result was returned from Query.getSingleResult()"

idordemservico é a minha chave primaria

ublic Integer buscaridentificador() {
        EntityManager em = getEntityManager();
       
        String sql = "select u.identificadoros from Ordemservico u order by u.idordemservico desc";
              

     Integer id = null;
     
            em.getTransaction().begin();
            id =Integer.parseInt(em.createQuery(sql).getSingleResult().toString());

           em.getTransaction().commit();
           return id;
        
       

    }

Oq pode estar errado nesse método?

Hebert_Coelho

Vc fez tudo que eu falei? Não vi o maxResults.

J
Hebert Coelho:
Vc fez tudo que eu falei? Não vi o maxResults.

Fiz sim, tá dessa forma:

public Integer buscaridentificador2() {
        EntityManager em = getEntityManager();
        String sql = "select u.identificadoros from Ordemservico u order by u.idordemservico DESC";
        Integer id = null;
        try {
            id = (Integer) em.createQuery(sql).setMaxResults(1);
            return id;
        } catch (Exception e) {

            return null;
        }
        //return id;

    }

Ai da o seguinte erro: incompatible types: Query cannot be converted to Integer

Ja fiz o Integer.parseint, mas ai esse erro aparecer: Query cannot be converted to String

Hebert_Coelho
Janson:
Hebert Coelho:
Vc fez tudo que eu falei? Não vi o maxResults.

Fiz sim, tá dessa forma:

public Integer buscaridentificador2() {
        EntityManager em = getEntityManager();
        String sql = "select u.identificadoros from Ordemservico u order by u.idordemservico DESC";
        Integer id = null;
        try {
            id = (Integer) em.createQuery(sql).setMaxResults(1);
            return id;
        } catch (Exception e) {

            return null;
        }
        //return id;

    }

Ai da o seguinte erro: incompatible types: Query cannot be converted to Integer

Ja fiz o Integer.parseint, mas ai esse erro aparecer: Query cannot be converted to String

Com todo respeito dê uma estudada no JPA. Aqui tem uma pancada de dicas de como fazer queries: http://uaihebert.com/?p=1137

Vc reparou que no seu código você não está nem disparando a query?

J
Hebert Coelho:
Janson:
Hebert Coelho:
Vc fez tudo que eu falei? Não vi o maxResults.

Fiz sim, tá dessa forma:

public Integer buscaridentificador2() {
        EntityManager em = getEntityManager();
        String sql = "select u.identificadoros from Ordemservico u order by u.idordemservico DESC";
        Integer id = null;
        try {
            id = (Integer) em.createQuery(sql).setMaxResults(1);
            return id;
        } catch (Exception e) {

            return null;
        }
        //return id;

    }

Ai da o seguinte erro: incompatible types: Query cannot be converted to Integer

Ja fiz o Integer.parseint, mas ai esse erro aparecer: Query cannot be converted to String

Com todo respeito dê uma estudada no JPA. Aqui tem uma pancada de dicas de como fazer queries: http://uaihebert.com/?p=1137

Vc reparou que no seu código você não está nem disparando a query?

Sim dando o Set ele não tá pegando a query.

Mas obrigado, resolvi da seguinte forma:

public List<Object> buscaridentificador2() {
        EntityManager em = getEntityManager();
        List <Object> lista3= new ArrayList();   
        String sql = "select u.identificadoros from Ordemservico u order by u.idordemservico DESC";


   
        int resultlist=0;
        
            
            em.getTransaction().begin();
            lista3.add( em.createQuery(sql).getResultList().get(0));

            em.getTransaction().commit();
            
           return lista3;
        
       
           
        }

Esse get(0) vai me retornar o index que eu quero do Result list.

Ele ta me retornando o ultimo registro, mas o problema é que esse retorno é um object e eu precisaria pegar esse retorno, que é um inteiro que vem to banco é somar +1, mas não consigo pelo retorno ser um object, tem como eu fazer alguma conversão?

EDIT: RESOLVIDO rsrs

Ficou assim:

public Integer buscaridentificador2() {
        EntityManager em = getEntityManager();
        
        List <Integer> lista3= new ArrayList();
      
        String sql = "select u.identificadoros from Ordemservico u order by u.idordemservico DESC";
        Integer numero=0;
        
            
            em.getTransaction().begin();
            lista3.add( Integer.parseInt(em.createQuery(sql).getResultList().get(0).toString()));
            
            em.getTransaction().commit();
            
            
            
            
            for (int i =0; i<lista3.size(); i++){
                numero = (Integer)lista3.get(0);
            }
            
           return numero;
        
       

           
        } 
           
        }

No final faço um vetor para pegar o inteiro na posição [0], com isso consigo trabalhar com ele.

Criado 23 de outubro de 2015
Ultima resposta 29 de out. de 2015
Respostas 7
Participantes 3