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

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:

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?

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?

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…

[code] 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;
}[/code]

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 :frowning:
[]s…

[quote=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?[/quote]

[quote=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?[/quote]
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:

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:

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: