"Query dinâmica" em jpa ...Como fazer?

19 respostas
Matheus_Paiva

Tenho dois selectItems gostaria de quando eu escolher um o outro automaticamente selecione um grupo …
O primeiro mostra as profissões ai de acordo com a profissão selecionada no segundo selectItem so vai trazer as pessoas que estão naquela profissão …
Atualmente eu marco a profissão e ele retorna todas as pessoas de todas as profissões …

Existe algum evento que eu chame na jsp para resolver isso ?
Ou alguma forma de fazer um “query dinâmica” .
Desde já agradeço a todos …

19 Respostas

Rodrigo_Sasaki

Qual a query que você está fazendo atualmente? ao meu ver ela não precisa ser dinâmica.

lele_vader

Você não precisa de consulta dinâmica mesmo não.
Crie um método ajax, que retorna uma list da outra select e mande um update do componente do selectItem das profissões.

Matheus_Paiva

ok ok

lele_vader

Area é o que você chama de profissao ?

Como estão modelados essas classes ?

Matheus_Paiva
Na minha class eu tenho:
@Entity
@Table(name="tabareaperito")
public class AreaPerito  implements Serializable {
     
    @Column(name = "CodArea")
    @Id
     private String codArea;
     @Column(name = "Area")
     private String area;
      @Column(name ="Profissao" )
     private String profissao;

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public String getCodArea() {
        return codArea;
    }

    public void setCodArea(String codArea) {
        this.codArea = codArea;
    }

    public String getProfissao() {
        return profissao;
    }

    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final AreaPerito other = (AreaPerito) obj;
        if ((this.codArea == null) ? (other.codArea != null) : !this.codArea.equals(other.codArea)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 71 * hash + (this.codArea != null ? this.codArea.hashCode() : 0);
        return hash;
    }
     
    
    
}
Rodrigo_Sasaki

e a query?

lele_vader

E a classe que tem a pessoa ?

Matheus_Paiva
{

    Query dynaQuery = getConexao().createQuery("select distinct(a.area) FROM AreaPerito a order by a.area");
    return dynaQuery.getResultList();
    }
Query dynaQuery = getConexao().createQuery("select DISTINCT(p.nome) From Perito p order by p.nome ");
    return dynaQuery.getResultList();
Rodrigo_Sasaki

a ideia da query não é buscar as pessoas levando em consideração a profissão? você vai ter que fazer um join com uns wheres aí. Sabe fazer isso?

Matheus_Paiva
public class Perito implements Serializable {
   @Id
    @Column(name="Nome")
   private String nome;
   @Id
 
   @Column(name="AreaPerito")
   private String areaPerito;   

    
    @Column(name = "Vara_restrito")
    private String varaRestrito;
    @Column(name = "Atualizacao")
    private String atualizacao;
    @Column(name = "NuDoc")
    //cpf
    private String numeroDocumento;
    @Column(name = "NuCRC")
    //numero do  conselho
    private String numeroCRC;
    @Column(name = "NuPis")
    private String numeroPis;
    @Column(name = "NuINSS")
    private String numeroInss;
    @Column(name = "NuISS")
    private String numeroIss;
    @Column(name = "NuIdentidade")
    private String numeroIdentidade;
    @Column(name = "IdDtEmissao")
    private String idDtEmissao;
    @Column(name = "DtNascimento")
    private String dtNascimento;
    @Column(name = "NomeMae")
    private String nomeMae;
    @Column(name = "Logradouro")
    private String logradouro;
    @Column(name = "Numero")
    private String numero;
    @Column(name = "Complemento")
    private String complemento;
    @Column(name = "Bairro")
    private String bairro;
    @Column(name = "Cep")
    private String cep;
    @Column(name = "Cidade")
    private String cidade;
    @Column(name = "Uf")
    private String uf;
    @Column(name = "PtReferencia")
    private String ptReferencia;
    @Column(name = "Telefone1")
    private String telefone1;
    @Column(name = "Telefone2")
    private String telefone2;
    @Column(name = "Fax")
    private String fax;
    @Column(name = "email")
    private String email;
    @Column(name = "Banco")
    private String banco;
    @Column(name = "Conta")
    private String conta;
    @Column(name = "Obs")
    private String obs;
    @Column(name = "Atende_Jef")
    private Boolean atendeJef;
    @Column(name = "Bloqueado")
    private String bloqueado;
    @Column(name = "RecInss")
    private Boolean recInss;
    @Column(name = "RecIss")
    private Boolean recIss;
    @Column(name = "RecInssIss")
    private String recInssIss;
    @Column(name = "ObsSuspensao")
    private String obsSuspensao;
    @Column(name = "SenhaPerito")
    private String senhaPerito;
    @Column(name = "PrimCodSiap")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date PrimCodSiap;
    @Column(name = "Agencia")
    private String agencia;
@Column(name = "Profissao")
    private String profissao;

gets,sets,equals e  hashcode omitidos ....

Nunca trabalhei com ajax tem algum exemplo ai ?

Matheus_Paiva

Sei … vou fazer … Valeu Digão …
Valeu Lele_vader

lele_vader

Temos um problema aí.
As suas classes não se relacionam.
Você repetiu atributos nas 2 classes, porque ?
Por exemplo a Àrea e o Perito tem profissão.

Um perito não é de uma área ?Então ele tem um relacionamento de M:1 com a area.

A profissão é relacionada como com a Area ? 1 Àrea tem 1 profissão ?

Matheus_Paiva

Lele … eu nao coloquei ainda os relacionamentos na minha classe mas um perito pode ser de várias areas …
E eu tenho uma chave primária composta … CodArea e Nome …
To montando parte por parte ainda dele …

lele_vader

Beleza.
Só fica a dúvida de porque o atributo profissão está em Àrea e Perito.

Matheus_Paiva

Eu vi tal campo agora … já o removi …

Rodrigo_Sasaki

Matheus Paiva:
Lele … eu nao coloquei ainda os relacionamentos na minha classe mas um perito pode ser de várias areas …
E eu tenho uma chave primária composta … CodArea e Nome …
To montando parte por parte ainda dele …

Só um adendo não relacionado ao tópico. Sempre que for possível evite usar chaves compostas. Claro que o JPA consegue tratar elas muito bem, mas você pode se poupar dores de cabeça com mapeamentos, e exceções inexplicáveis do provider (principalmente Hibernate, na minha experiência) que são trabalhosas de entender e resolver.

Matheus_Paiva

Digao … eu não sou muito fã de chaves compostas mas estou pegando de um sistema que roda em vb e passando para java … utilizando os campos da base de dados … Ou seja tenho que seguir tal sequencia …

lele_vader

Considerando que um perito pode estar em muitas áreas e cada área tem uma profissão acho que o sql pode ser assim

“FROM Perito p join p.areas”

Isso vendo por alto.
Sobre como fazer uma requisição ajax você pode ver no link abaixo.

http://uaihebert.com/?p=669

Acho que você vai ter que ter uma lista de Areas, daí com o ajax você passa um objeto de um Perito e chama um método que traga o objeto de perito com as Áreas.
Daí você pega as áreas dele e coloca nessa lista que seta o selectItens das áreas e dá render nesse componente.

Acredito que seja mais ou menos assim
Boa sorte.

Matheus_Paiva

Valeu lele … vou fazer aqui

Criado 4 de setembro de 2012
Ultima resposta 4 de set. de 2012
Respostas 19
Participantes 3