Select max duvida

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?


    //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;
    }
}
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 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() {
    }
@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;
    }

Da uma olhada nesse link:

http://www.jeebrasil.com.br/mostrar/91

O artigo da Raphaela e do Gleydson, da uma boa geral de mapeamento do Hibernate, e acho q esta faltando um atributo no seu mapeamento, no artigo deles é explicado assim:

"?FetchType.EAGER: sempre que o objeto “pai” for trazido da base de dados, o atributo mapeado com fetch=FetchType.EAGER fará com que o seu conteúdo também seja trazido;

?FetchType.LAZY: sempre que o objeto “pai” for trazido da base de dados, o atributo mapeado com fetch=FetchType.LAZY fará com que o seu conteúdo somente seja trazido quando acessado pela primeira vez."

Nao é isto nao.Uma vez que eu nao coloque, o JPA ja fala para mim que o valor defaut = EAGER