Duvida select max com jpa

30/12/2009

0

Ola pessoal, tenho uma relaçao entre 2 tabelas. Especies e Racas. Sendo que a tabela Racas é de chaves composta, e por este motivo criei uma terceira classe apenas com as chaves. Minha duvida é que preciso trazer o ultimo id de racas aonde o codigo da especie for = PARAMETRO..

Como seria isto?

Eu tentei assim mas nao funciona.Alguem poderia me dar uma luz?

view plaincopy to clipboardprint?    //Encontrar ultimo código da Racas por CódEspecie      public Integer getLastIdByIdEspecies(Integer idEspecies) {            Object id = pesq("Select MAX(ra.idRacas) FROM  RacasPK ra WHERE ra.idEspecies  = " + idEspecies).getSingleResult();          int idtoReturn = 1;            if (id != null) {              idtoReturn = ((Integer) id) + 1;          } else {          }            return idtoReturn;      }  }   //Encontrar ultimo código da Racas por CódEspecie public Integer getLastIdByIdEspecies(Integer idEspecies) { Object id = pesq("Select MAX(ra.idRacas) FROM RacasPK ra WHERE ra.idEspecies = " + idEspecies).getSingleResult(); int idtoReturn = 1; if (id != null) { idtoReturn = ((Integer) id) + 1; } else { } return idtoReturn; } }

view plaincopy to clipboardprint?public class Especies implements Serializable {      private static final long serialVersionUID = 1L;      @Id      @GeneratedValue(strategy = GenerationType.IDENTITY)      @Basic(optional = false)      @Column(name = "idEspecies")      private Integer idEspecies;      @Basic(optional = false)      @Column(name = "Descricao")      private String descricao;      @OneToMany(cascade = CascadeType.ALL, mappedBy = "especies")      private Collection<Racas> racasCollection;        public Especies() {      }  public class Especies implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "idEspecies") private Integer idEspecies; @Basic(optional = false) @Column(name = "Descricao") private String descricao; @OneToMany(cascade = CascadeType.ALL, mappedBy = "especies") private Collection<Racas> racasCollection; public Especies() { }

view plaincopy to clipboardprint?public class Racas implements Serializable {      private static final long serialVersionUID = 1L;      @EmbeddedId      protected RacasPK racasPK;      @Basic(optional = false)      @Column(name = "Descricao")      private String descricao;      @OneToMany(cascade = CascadeType.ALL, mappedBy = "racas")      private Collection<Animais> animaisCollection;      @JoinColumn(name = "idEspecies", referencedColumnName = "idEspecies", insertable = false, updatable = false)      @ManyToOne(optional = false)      private Especies especies;        public Racas() {      }  public class Racas implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId protected RacasPK racasPK; @Basic(optional = false) @Column(name = "Descricao") private String descricao; @OneToMany(cascade = CascadeType.ALL, mappedBy = "racas") private Collection<Animais> animaisCollection; @JoinColumn(name = "idEspecies", referencedColumnName = "idEspecies", insertable = false, updatable = false) @ManyToOne(optional = false) private Especies especies; public Racas() { }

view plaincopy to clipboardprint?@Embeddable  public class RacasPK implements Serializable {      @Basic(optional = false)      @Column(name = "idRacas")      private int idRacas;      @Basic(optional = false)      @Column(name = "idEspecies")      private int idEspecies;        public RacasPK() {      }        public RacasPK(int idRacas, int idEspecies) {          this.idRacas = idRacas;          this.idEspecies = idEspecies;      } 
Andrei Hirata

Andrei Hirata

Responder

Posts

24/01/2010

Guilherme Bahia

Tive que fazer uma aplicação em que em uma determinada situação era necessário buscar o último objeto persistido, fiz a seguinte consulta: RigDna rigDna = dao.pesqParam("Select a From RigDna a Where a.id = (Select max(b.id) From RigDna b)");
Responder

04/02/2010

Luciana Silveira

Andrei, precisei recentemente de algo parecido: Tinha uma tabela de itens de pedido e um tabela de unidades e cada item de pedido, possuia mais de uma unidade. Então fiz um laço for para percorrer todos os itens e dentro de cada item armazenei uma coleção de unidades. Assim:   Na sua classe Raça, crie uma variável do tipo @Transient, ou seja, para indicar que não será persistido no banco e encapsule:   public class Raca implements Serializable{ ...   @Transient private String raca   public String getRaca(){ return raca; }   public void setRaca(Srring raca) this.raca = raca; ...   }   Na sequencia, na sua classe controladora de espécies, implemente o laço for, dentro do método que captura o list de espécies trazendo o todos os objetos da classe Raca e jogando-o numa coleção. Feito isso, calcule o tamanho do array, subtraia 1 e você terá o último objeto da classe Raca para o objeto Especie em questão:   public List<Especie> getEspecies(boolean all){ EntityManager em = getEntityManager(); try { Query q = em.createQuery("SELECT object(i) FROM Raca i"); if(!all){ q.setMaxResults(batchSize); q.setFirstResult(getFirstItem()); ) int indice; List<Especie> qryEspecie = q.getResultList(); //este objeto armaz. o resultado da query List<Especie> minhasEspecies = new ArrayList<Especie>(); //este objeto armaz. todos os objetos Espécie   for(Especie e : qryEspecie) { indice = e.getRacaIdCollection().size(); Object [] o; o = e.getRacaIdCollection().toArray(); //transforma a coleção de raças da especie em questão num array Raca r;   if(o.length != 0) { r = (Raca) o[o.length - 1]; if(!em.isOpen()) { em = super.getEntityManager(); } e.setRaca(r.getRaca()); } ...   Alguma coisa assim... espero ter ajudado!            
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar