JPA/Hibernate duvida no uso Example com criteria

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:

obrigado pelo retorno…

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

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

Você está concatenando a String ( > ,< … ) ?

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 =&lt;&gt;!&gt;=&lt;=*/
	private String condicao;
	/*  Valor do atributo */
	private String valor;
	/*  Operador   and or  */
	private String operador;
	/*  Nome da Tabela  */
	private String nomeTabela;

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

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();