[RESOLVIDO] Como validar dois campos de uma tabela usando HQL ou Criteria

6 respostas
M

Boa Tarde!

Tenho uma tabela que tem id, nome, sobrenome e endereço.
Preciso validar em HQL se o nome e sobrenome for igual retornar falso se for diferentes retorna verdadeiro. Eu já tenho uma função que insere, preciso fazer esta validação que manda para a minha função broquear. E não estou conseguindo. Fiz uma função em Criteria, mas quando colocava o mesmo nome que estava no banco exemplo Maria, ele também não deixa inserir =(
Obs: Eu programo faz pouco tempo e se alguém poder me indicar sites para estudar os dois…
[]s…
:slight_smile:

6 Respostas

C

Não entendi diretiro, se ja exisitir um Cristian no banco de dados voce naum que deixar inserir outro é isso?

ou o cara que eu to tentando cadastrar naum poder ter o nome e o sobrenome iguais

se for isso faz um if

if(nome.toLowerCase().equals(sobrenome.toLowerCase())
{
//nome e sobrenome iguais
}
else
{
//nome e sobrenome diferentes
}

Entendeu?

H

Como assim função? HQL não faz função, apenas consultas.

Pq vc não faz isso em duas etapas? Primeiro consulta e depois insere ou não?

M
Oie Cristian... tdb? Valeu por responder rápido... então é essa a lógica, não permitir inserir quando tenha um cadastro igual com nome e sobrenome iguais, mas preciso fazer isso em HQL ou Criteria... para verificar so banco se já existe o nome="Cristian" e sobrenome="Palma". fiz essa função aqui antes...
public boolean isNomeExiste(String id, String nome, String sobrenome) {
		System.out.println("entrou na verificação");
		Criteria criteria = this.session.createCriteria(Pessoa.class);
		if (isNullOrEmpty(id)) {
			System.out.println("if");
			criteria.add(Restrictions.and(Restrictions.eq("id", nome),Restrictions.eq("id", sobrenome)));
		} else {
			System.out.println("else");
			LogicalExpression and = Restrictions.and(
					Restrictions.eq("id", nome),Restrictions.ne("id", id));
			criteria.add(and);
			
		}
		@SuppressWarnings("unchecked")
		Collection<Pessoa> pesList = criteria.list();
		return (pesList.isEmpty()) ? true : false;
	}
Mas não entendi muito bem a função, se alguém puder me explicar. Então assim ela bloqueia a inserção de nomes iguais exemplo: já tenho no meu banco Cristian Palma e estou tentando inserir Cristian Nogueira, retorna true que já existe o nome...e não insere... hehehe :( []s...
CristianPalmaSola10:
Não entendi diretiro, se ja exisitir um Cristian no banco de dados voce naum que deixar inserir outro é isso?

ou o cara que eu to tentando cadastrar naum poder ter o nome e o sobrenome iguais

se for isso faz um if

if(nome.toLowerCase().equals(sobrenome.toLowerCase())
{
//nome e sobrenome iguais
}
else
{
//nome e sobrenome diferentes
}

Entendeu?

M

jakefrog:
Como assim função? HQL não faz função, apenas consultas.

Pq vc não faz isso em duas etapas? Primeiro consulta e depois insere ou não?


Isso mesmo, faço uma coisa e depois a outra… desculpe o erro ao me expressar ou horrivel disso, acredito que por não ter tanto conhecimento…
Então expliquei melhor o que preciso no comentario acima não tinha visto, o seu sorry =(. Será que pode me ajudar?
Aproveitando para dizer que aquele código não estava inserindo hehehe… mexi em algo que não sei oque e parou kkkk…
[]s… :smiley:

M

Galera consegui resolver temporariamente o meu problema usando SQLQuery, porém continuo precisando usar na minha função em HQL ou Criteria, pois o SQLQuery, fica focado somente no banco SQL…
Se alguém puder me ajudar?.. Abaixo minha função que preciso implementar =) …

public boolean isNomeExiste(String nome, String sobrenome) { if (isNullOrEmpty(nome)) { return false; } SQLQuery consulta = session .createSQLQuery("select * from tb_pessoa pessoa where pessoa.nome= :nome and pessoa.sobrenome = :sobrenome"); consulta.setString("nome", nome); consulta.setString("sobrenome", sobrenome); @SuppressWarnings("unchecked") Collection<Pessoa> depList = consulta.list(); //System.out.println(nome+"nome"+ sobrenome+"sobrenome"); return (depList.isEmpty()) ? false : true;
[]s… :lol:

M

Galera consegui…
Um amigo, me ensinou uma query HQL básica dai consegui validar a função, como eu queria… Segue código com comentários e sysout!

public boolean isNomeExiste(String id, String nome, String sobrenome) {//colocado id para validar quando é edição pois tem o valor do id System.out.println("id "+id); if (isNullOrEmpty(id)) { System.out.println("entrou aqui no if"); Query query = this.session.createQuery("SELECT dep.nome FROM Pessoa as dep WHERE dep.nome = :nome AND dep.sobrenome = :sobrenome");//como aqui esta inserindo não fazemos validacao do id, não é necessário. query.setString("nome", nome);//seta os valores as variaveis query.setString("sobrenome", sobrenome); @SuppressWarnings("unchecked") Collection<Pessoa> depList = query.list(); System.out.println("valor isEmpty"+depList.isEmpty()); return (depList.isEmpty()) ? false : true; //retorna o resultado boolean para a minha função } if(id != null){ System.out.println("entrou diferente de null"); Query query = this.session.createQuery("SELECT dep.nome FROM Pessoa as dep WHERE dep.nome = :nome AND dep.sobrenome = :sobrenome AND dep.id <> :id"); query.setString("id",id); query.setString("nome", nome); query.setString("sobrenome", sobrenome); @SuppressWarnings("unchecked") Collection<Pessoa> depList = query.list(); System.out.println("valor isEmpty"+depList.isEmpty());//para ver a resposta do true ou false return (depList.isEmpty()) ? false : true; } System.out.println("fora dos ifs"); return false;}

[ ]s…
:wink:

Criado 23 de julho de 2012
Ultima resposta 24 de jul. de 2012
Respostas 6
Participantes 3