[JSF+Hibernate] Case Sensitive

2 respostas
A

Olá a todos;

Estou trabalhando num projeto, e estou usando JSF (RichFaces) e Hibernate, banco de dados PostgreSQL. Preciso validar para não permitir que o usuário persista registros com a mesma descrição. Por exemplo “registro” e “REGISTRO”.

Minha dúvida é: como trabalhar com case sensitive no java e hibernate? Existe algum método que eu já posso utilizar pra não permitir que o usuário insira registros com a mesma descrição, porém com letras maiusculas e minusculas…?

Agradeço qualquer resposta, pois dei uma googlada e não achei praticamente nada…

2 Respostas

felipempantoja

Fala amigão.

Po kra, deixa eu ver se entendi bem...
vc não quer inserir no banco registros com a coluna descrição com mesmo valor de um outro registro certo!?

Acho que a maneira mais simples é vc fazer uma consulta no banco antes de persistir o objeto
Não testei aqui o código, mas acho que seria mais ou menos isso:

public void persist(Tabela tabela){

	Session session = HibernateUtil.getSession().openSession();
	List<Tabela> tabelas = session.createQuery("from Tabela t where upper(t.descricao) = upper(:descricao)").setString("descricao", tabela.getDescricao()).list();

	if(tabelas.size() == 0){
		Transaction tx = session.beginTransaction();
		session.save(tabela);
		tx.close();
	}
	session.close();
}

Bom, de qualquer maneira, eu uso o SQL Server aqui e aqui não é case sentitive, então nem precisaria usar o método upperCase pra consultar.

Vê se isso ae te ajuda amigão.
Abraços.

A

Fala grande felipempantoja;

Kra depois de dar uma fuçada no google e seguir a sua idéia (fazer um método consultar antes) consegui fazer funcionar;

Ficou assim o código para quem precisar depois;

Criteria criteria = HibernateUtility.getSession().createCriteria(AtividadeDTO.class);
		
Example exemplo = Example.create(dto);
exemplo.ignoreCase();
criteria.add(exemplo);
		
criteria.add(Restrictions.not(Restrictions.eq(Constantes.ATIVIDADE_SEQUENCIAL, ativSeq)));
		
dto = (AtividadeDTO) criteria.uniqueResult();
return dto;

Realizando a consulta assim, ele elimina o case sensitive e traz as atividades independente se estão maiusculas ou minusculas…

Ai é só testar se o dto for diferente de nulo, é só levantar exceção pq já tem uma atividade com a mesma descrição…

Valeu galera…

Criado 2 de setembro de 2008
Ultima resposta 4 de set. de 2008
Respostas 2
Participantes 2