Bom dia É meu primeiro post aqui, nem sei se é o local correto !
Estou lendo : http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
Agora estou querendo fazer o seguinte:
Um formulário de pesquisa de alunos, com 2 campos CURSO/CPF/ e 1 botão para as duas consultas.
PEQUISA NA TABELA ALUNOS:
hql.append(" SELECT * FROM ALUNOS WHERE ETC…:CPF");
PEQUISA NA TABELA CURSOS:
hql.append(" SELECT * FROM ALUNOS WHERE ETC…:CODIGO_CURSO");
Minha pergunta é : se eu tenho 2 campos 1 botão como deixar essa pesquisa dinâmica, se o usuário digitar no campo curso e clicar no botão ele vai executar a HQL1, se não ele execulta a HQL2.
Este exemplo aqui eu passo a UF como parâmetro, funciona, e se for 2 parmetros de consultas diferentes ?
[code]@SuppressWarnings(“unchecked”)
public List buscarFiliais(Uf uf) throws Exception{
try {
Session session = getSession();
StringBuilder hql = new StringBuilder();
hql.append(" select distinct f from Filial f, EnderecoPessoa ep, Uf uf, Pessoa p " +
" where p.codigoPessoa = ep.pessoa.codigoPessoa" +
" and ep.uf.codigo = uf.codigo " +
" and f.pessoa.codigoPessoa = p.codigoPessoa" +
" and uf.codigo = :codigoUf");
Query query= session.createQuery(hql.toString());
query.setParameter("codigoUf", uf.getCodigo());
return query.list();
} catch (Exception e) {
throw new Exception("Erro ao buscar filiais: " + e.getMessage());
}
}
[/code]
Obrigada.
Você pode usar o operador OR para comparar os campos de sua pesquisa, assim usaria somente um SQL.
Bom dia.
Você pode verificar os campos que estão preenchido antes da efetua a pesquisa. Tenho um sistema que a pessoa pode digita o nome ou mae ou data de nascimento e depois de pesquisa no banco, dependendo do que foi digitando.
Bom dia Senhores !
Poderia postar esse código das pesquisas para eu ver como fica ?
Obrigado pela atenção dos Guris !
Att.
Bom dia, e da-lhe Inter… não pude resistir. hehehehe
Olha só Marta, na view vc pode testar qual dos campos está preenchido. Dai decide qual consulta vais utilizar.
EU passei por algo similar, dai eu alterei a assinatura do método incluindo um Boolean, e fazia um teste de acordo com o Boolean, ± assim:
@SuppressWarnings("unchecked")
public List<Filial> buscarFiliais(Uf uf, Boolean xxxx) throws Exception{
try {
Session session = getSession();
StringBuilder hql = new StringBuilder();
if (xxxx) {
hql.append(" select distinct f from Filial f, EnderecoPessoa ep, Uf uf, Pessoa p " +
" where p.codigoPessoa = ep.pessoa.codigoPessoa" +
" and ep.uf.codigo = uf.codigo " +
" and f.pessoa.codigoPessoa = p.codigoPessoa" +
" and uf.codigo = :codigoUf");
Query query= session.createQuery(hql.toString());
query.setParameter("codigoUf", uf.getCodigo());
} else {
// aqui vc coloca a outra hql
}
return query.list();
} catch (Exception e) {
throw new Exception("Erro ao buscar filiais: " + e.getMessage());
}
}
asandrob KAkaka Engraçado !
Guri tão inteligente se perdendo com esse timeco ! tirando o comentário lamentável [risos] Vou fazer como tu falastes acho que resolve…
Até+loguinho !
Edson Donizete !
Post seu código por favor… e do mesmo modo ?
Att.
[quote=marta_ximenes]Edson Donizete !
Post seu código por favor… e do mesmo modo ?
Att.
[/quote]
Tente assim:
//testa se tem alguma coisa digitada no txtCodigoProduto
if (txtCodigoProduto.getText()!= "") {
//executa a pesquisa com a informação digitada em txtCodigoProduto
List<Filial> filiais = buscarFiliais(uf, true); //aqui o Boolean eu seto como true
} else {
//executa a pesquisa com a informação digitada no outro JTextField
List<Filial> filiais = buscarFiliais(uf, false); //aqui o Boolean eu seto como false
}
Bom dia.
public List<Alunos> buscarAlunos(String cpf, String codigo) throws Exception{
try {
Session session = getSession();
Query query = null;
StringBuilder hql = new StringBuilder();
hql.append(" SELECT * FROM Alunos WHERE ");
if (!cpf.trim().equals("") && !codigo.trim().equals("") ) {
hql.append(" a.cpf = :cpf ");
hql.append(" and etc .... = :codigo ");
query= session.createQuery(hql.toString());
query.setParameter("cpf", cpf);
query.setParameter("codigo", codigo);
}else if (!cpf.trim().equals("")) {
hql.append(" a.cpf = :cpf ");
query= session.createQuery(hql.toString());
query.setParameter("cpf", cpf);
}else if (!codigo.trim().equals("")) {
hql.append(" etc ... = :codigo ");
query= session.createQuery(hql.toString());
query.setParameter("codigo", codigo);
}
if(query != null){
return query.list();
}
return null;
} catch (Exception e) {
throw new Exception( e.getMessage());
}
}
Edson boa Noite…
No meu caso, tenho 2 consultas diferente, na verdade faço um select em uma view mapeada…
Na tela de pesquisa tenho 2 campus e 1 botao, o usuario so tem 1 opcao para escolher, a ou b.
@Name(value = "usuarioConsultaService")
public class UsuarioConsultaServiceImpl<nuCgcCpf,pContrato> extends AppServiceImpl<VwUsuarios> implements UsuarioConsultaService{
static final long serialVersionUID = 1L;
public List<VwUsuarios> buscaUsuariosCpf(nuCgcCpf nucgccpf,pContrato pocontrato)throws Exception{
Session session = (Session) getSession();
StringBuilder hql = new StringBuilder();
hql.append(" SELECT");
hql.append(" u.nm_pessoa_razao_social_u");
hql.append(" u.cd_usuario");
hql.append(" u.fl_tipo_pessoa_u");
hql.append(" FROM");
hql.append(" VW_USUARIOS u,");
hql.append(" TB_TIPO_REDE_ATENDIMENTO r,");
hql.append(" TB_PLANO_PAI pp,");
hql.append(" TB_PLANO p");
hql.append(" WHERE");
hql.append(" u.nu_cgc_cpf_t = :nuCgcCpf");
hql.append(" AND");
hql.append(" u.fl_status_usuario = 2");
hql.append(" AND");
hql.append(" cd_plano = cd_plano");
hql.append(" AND");
hql.append(" p.cd_plano = u.cd_plano");
hql.append(" AND");
hql.append(" pp.cd_plano_pai = p.cd_plano_pai");
hql.append(" AND");
hql.append(" r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento");
hql.append(" AND");
hql.append(" pp.cd_tipo_rede_atendimento <> 'OD' ");
hql.append(" AND");
hql.append(" r.ds_tipo_rede_atendimento <> 'ODONTOLOGIA'");
Query query= session.createQuery(hql.toString());
query.setParameter("nuCgcCpf", nucgccpf);
return buscarCpf();
} catch (Exception e) {
throw new Exception("Erro ao buscar CPF " + e.getMessage());
try{
hql.append(" select u.nm_pessoa_razao_social_u ");
hql.append(" u.cd_usuario ");
hql.append(" u.fl_tipo_pessoa_u ");
hql.append(" from vw_usuarios u ");
hql.append(" tb_tipo_rede_atendimento r ");
hql.append(" tb_plano_pai pp");
hql.append(" tb_plano p");
hql.append(" where u.nu_ordem_usuario = :pContrato");
hql.append(" and u.fl_status_usuario = 2 ");
hql.append(" and p.cd_plano = u.cd_plano ");
hql.append(" and pp.cd_plano_pai = p.cd_plano_pai ");
hql.append(" and r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento ");
hql.append(" and pp.cd_tipo_rede_atendimento <> 'OD' ");
hql.append(" and r.ds_tipo_rede_atendimento <> 'ODONTOLOGIA'");
Query query= session.createQuery(hql.toString());
query.setParameter("pContrato", pocontrato);
return buscarCpf();
} catch (Exception f) {
throw new Exception("Erro ao buscar CPF " + f.getMessage());
}
}
}
Bom dia.
Não seria o caso de verificar qual dos campos foi preenchido e fazer a busca.
@Name(value = "usuarioConsultaService")
public class UsuarioConsultaServiceImpl<nuCgcCpf,pContrato> extends AppServiceImpl<VwUsuarios> implements UsuarioConsultaService{
static final long serialVersionUID = 1L;
public List<VwUsuarios> buscaUsuariosCpf(nuCgcCpf nucgccpf,pContrato pocontrato)throws Exception{
Session session = (Session) getSession();
StringBuilder hql = new StringBuilder();
try{
hql.append(" SELECT");
hql.append(" u.nm_pessoa_razao_social_u");
hql.append(" u.cd_usuario");
hql.append(" u.fl_tipo_pessoa_u");
hql.append(" FROM");
hql.append(" VW_USUARIOS u,");
hql.append(" TB_TIPO_REDE_ATENDIMENTO r,");
hql.append(" TB_PLANO_PAI pp,");
hql.append(" TB_PLANO p");
hql.append(" WHERE");
hql.append(" u.fl_status_usuario = 2");
hql.append(" AND");
hql.append(" cd_plano = cd_plano");
hql.append(" AND");
hql.append(" p.cd_plano = u.cd_plano");
hql.append(" AND");
hql.append(" pp.cd_plano_pai = p.cd_plano_pai");
hql.append(" AND");
hql.append(" r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento");
hql.append(" AND");
hql.append(" pp.cd_tipo_rede_atendimento <> 'OD' ");
hql.append(" AND");
hql.append(" r.ds_tipo_rede_atendimento <> 'ODONTOLOGIA'");
if(nucgccpf != null){
hql.append(" AND");
hql.append(" u.nu_cgc_cpf_t = :nuCgcCpf");
Query query= session.createQuery(hql.toString());
query.setParameter("nuCgcCpf", nucgccpf);
return query.list();
}else if(pocontrato != null ){
hql.append(" AND");
hql.append(" where u.nu_ordem_usuario = :pContrato");
Query query= session.createQuery(hql.toString());
query.setParameter("pContrato", pocontrato);
return query.list();
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return null;
}
}
Essa é a idéia !
Da uma olhda no meu pl !
select u.nm_pessoa_razao_social_u
,u.cd_usuario
,u.fl_tipo_pessoa_u
from vw_usuarios u
,tb_tipo_rede_atendimento r
,tb_plano_pai pp
,tb_plano p
where
u.nu_cgc_cpf_t = to_number(pNu_Cpf)
and u.fl_status_usuario = 2
and p.cd_plano = u.cd_plano
and pp.cd_plano_pai = p.cd_plano_pai
and r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento
and pp.cd_tipo_rede_atendimento <> 'OD'
and r.ds_tipo_rede_atendimento <> 'ODONTOLOGIA';
cursor filtroContrato is
select u.nm_pessoa_razao_social_u
,u.cd_usuario
,u.fl_tipo_pessoa_u
from vw_usuarios u
,tb_tipo_rede_atendimento r
,tb_plano_pai pp
,tb_plano p
where u.nu_ordem_usuario = pContrato
and u.fl_status_usuario = 2
and p.cd_plano = u.cd_plano
and pp.cd_plano_pai = p.cd_plano_pai
and r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento
and pp.cd_tipo_rede_atendimento <> 'OD'
and r.ds_tipo_rede_atendimento <> 'ODONTOLOGIA';
Somente aproveita a parte do Select que é igual e coloca uma condição para verificar os campos.