paribe
Janeiro 26, 2009, 8:44am
#1
Olá,
duvida referente uso do Example vi alguns exemplos na internet
mas somente com like …
Gostaria de saber se posso usar na situação que tenho abaixo onde a condição
pode ser ">" ou ">=" …
Alguém já passou por isso e se pode usar no Example pois terei algumas condições
e o operador também pode ser "OR" ou "AND" como poderia tratar isso no Example …
Se alguém puer me ajudar …
abs
Campo Condição Valor Operador
===== ====== ==== =======
Dta Nasc > 01/01/2008 OR
Codigo >= 10
Utilizando Example, não será possível fazer isso. Para esse caso, acho que o ideal é utilizar Restrictions .
Blz? Flw! :thumbup:
albama
Janeiro 27, 2009, 9:06am
#4
Não sei se entendi direito, mas me parece que você quer usar os operadores >,>=, <,<= …
Eu tenho usado numa boa sim, segue um exemplo de codigo que uso,
usando o operador diferente “<>”
Query q = manager.createQuery("SELECT h FROM Hierarquia as h WHERE h.id.idLocalSuperior =:idLocalSuperior " +
"AND h.id.idEstrutura =:idEstrutura "+
"AND h.id.idLocalReferencia <> :idLocalReferencia");
q.setParameter("idLocalSuperior", idLocalSuperior);
q.setParameter("idEstrutura", idEstrutura);
q.setParameter("idLocalReferencia", idLocalSuperior);
Usando o operador AND , igual “=”
public boolean possuiHierarquiaSuperior(int idLocalReferencia, int idEstrutura) {
boolean retorno = false;
Hierarquia hier = new Hierarquia();
Query q = manager.createQuery("SELECT h FROM Hierarquia as h WHERE h.id.idLocalReferencia = :idLocalReferencia " +
"AND h.id.idLocalSuperior <> :idLocalSuperior "+
"AND h.id.idEstrutura = :idEstrutura "+
"AND h.visualizacao = 'HIERARQUICO' ");
q.setParameter("idLocalReferencia", idLocalReferencia);
q.setParameter("idLocalSuperior", idLocalReferencia);
q.setParameter("idEstrutura", idEstrutura);
if ( q.getResultList().size() == 1 ) {
retorno = true ;
}else {
retorno = false;
}
return retorno;
}
Espero ter ajudado.
Marco Aurélio
aureliorodrigues@gmail.com
paribe
Janeiro 27, 2009, 9:12am
#5
obrigado pelo retorno
mas na tela eu tenho um campo Condição (list box) onde contém
>
<
>=
<=
!
onde o usuário pode escolher qq um acima e tenho que montar dinamico ???
abs
albama
Janeiro 27, 2009, 9:38am
#6
Você está concatenando a String ( > ,< … ) ?
paribe
Janeiro 27, 2009, 9:57am
#7
não criei uma classe com os dados da tela e estou usando criteria pra montar o select …mas existe muito if
que tenho que fazer ???
queria ver se existe outra forma …
public class CriterioConsultaDetail {
/* Id do Objeto*/
private Long id;
/* Nome do atributo do Objeto*/
private String campo;
/* Condição do campo =<>!>=<=*/
private String condicao;
/* Valor do atributo */
private String valor;
/* Operador and or */
private String operador;
/* Nome da Tabela */
private String nomeTabela;
albama
Janeiro 27, 2009, 10:37am
#8
Na verdade eu pensei em algo assim , como um parametro
public void persiste ( Cliente cliente, String parametro){
String SQL = "SELECT * FROM cliente where valor " + parametro + cliente.valor;
}
Onde está cliente.valor voce usa a JPQL, ou HQL
Marco Aurélio
aureliorodrigues@gmail.com
paribe
Janeiro 27, 2009, 10:58am
#9
como é dinamico varios opções estouusando assim …
simulando que a informação veio da tela
cc1 = new CriterioConsultaDetail();
cc1.setCampo("email");//nome campo do objeto
cc1.setValor("xxxxxxxx@h.com.br");
cc1.setCondicao("=");
cc1.setOperador("");
cc1.setNomeTabela("User");
cc.addCriterioConsulta(cc1);
–criteria
Criteria c = session.createCriteria(User.class,“user”);
if ( “=”.equals(ccs.getCondicao()) )
c.add( Restrictions.eq(ccs.getCampo(), ccs.getValor()) );
c.addOrder( Order.desc(“id”) );
List result = c.list();