Duvida select max com jpa
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; }
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
Curtidas 0
Respostas
Guilherme Bahia
30/12/2009
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)");
GOSTEI 0
Luciana Silveira
30/12/2009
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!
GOSTEI 0