Máscaras com Hibernate  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
fviana
JavaChild
[Avatar]

Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline

Máscaras com Hibernate

1 - Introdução
Em um projeto de migração, deparei-me com um problema comum, mas de difícil resolução (utilizando muita 'gambiarra'). Recebi um damp de um banco de dados com várias tabelas, uma delas, TB_ENDERECO, possuía uma coluna de CEP, porém esta era do tipo numérica no banco, mas deveria ser sempre visualizada com a máscara 99999-999.
Criei então um UserType do hibernate, responsável pela formatação da máscara ao recuperar e remoção da máscara ao gravar o valor.

2 - Construção do utilitário
O primeiro passo é construir o utilitário que irá adicionar e remover a máscara.


3 - O Tipo Formatador
Para criar um tipo de dados para o hibernate basta criar uma classe implementando a interface org.hibernate.usertype.UserType. Nela há métodos que lê e grava o valor diretamente do banco de dados, além de outros métodos auxiliares.
Para nosso formatador ficar bem reutilizável teremos que implementar outra interface, a org.hibernate.usertype.ParameterizedType, que indica pro Factory do hibernate que o type possue parâmetros que devem ser enviados para ele.

Neste formatador existe 3 parametros, a máscara, o classType (tipo a ser setado para gravação) e o type (tipo da coluna no banco).
Obs.: Observe que estou utilizando a api commons-beans para a conversão de tipos, que pode ser baixado no site da Apache.

4 - Utilização

Repare que o cep é do tipo string, mas no banco o tipo é numérico (2 representa o tipo NUMERIC - ver java.sql.Types), sendo registrado pelo parâmetro 'type', e no hibernate (na verdade no PreparedStatement) o tipo a ser instanciado e gravado é java.lang.Long, sendo registrado pelo parâmetro classType.
Sendo assim, ao recuperar um Endereço, a propriedade cep virá com a máscara, e ao salvar um Endereço, a coluna cep receberá um número.

5 - Conclusão
Este é um mero exemplo de utilização de UserType do hibernate. Em vários casos podemos utilizar este recurso para facilitar o desenvolvimento. Nesta mesma migração, criamos também um UserType para criar uma lista a partir de um campo varchar2 que armazena telefones no mesmo campo utilizando; como separador.

Então, é só...
[Email] [WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team