Classe DAO genérica com Hibernate – (cont. II)

Num post anterior, fiz algumas considerações sobre funcionalidades de uma classe DAO genérica. Destaquei uma configuração mínima em métodos que uma Classe DAO pode ter para ser útil. Leia mais.

Agora irei descrever algumas novas funcionalidades (novos métodos), que acrescentei a minha classe DAO que pode ser de grande ajuda para todos. Vejamos primeiro o interface original com os acréscimos que fiz:


/* T é o tipo da classe que a DAO irá gerenciar e ID é o tipo do campo chave primária. Não utilize chave composta nem chave com dados naturais, ou seja, dados com significado, por exemplo, RG, CPF, etc. O ideal é utilizar um campo numérico auto-incrementável na chave primária.*/

public interface IBaseDAO<T, ID> : IDisposable
{
void BeginTransaction(); //Inicia transação
void CommitTransaction(); //Grava transação
void RollbackTransaction(); //Desfaz transação
T SelecionarPorId(ID id); // Seleciona um registro pelo ID
T Inserir(T obj);
T Alterar(T obj);
void Excluir(T obj);
IList<T> Listar(string ordem); //listar ordenado por campo
ICriteria getCriteria();
ISession getSession();
T Atualiza(T obj);
void Excluir(IList<T> lst);
void Incluir(IList<T> lst);
void Alterar(IList<T> lst);
bool EmUso<U>(string join, string propertyName, ID objectValue);
IList CreateQuery(string hql);
IList<U> CreateQuery<U>(string hql);
T UniqueResult(string hql);
U UniqueResult<U>(string hql);
T SelecionarPor(string propertyName, object value);
void ValidaNotNull(T obj);
DataTable ToDataTable(IList<T> lst);
string InsertSQL(T objPersistente);
string UpdateSQL(T objPersistente);
string DeleteSQL(T objPersistente);

}


  • ValidaNotNull – Este método recebe um objeto hibernate (transiente ou persistente) e faz uma validação NOT NULL. Nos arquivos .hbm.xml constam as configurações das propriedades. Este método verifica se os campos ou propriedades não nulos do objeto passado como parâmetro de entrada estão efetivamente com conteúdo, ou seja, não nulos. Eu simplesmente incluo no início do método de inserção e/ou alteração no objeto de negócio uma linha: ValidaNotNull(paciente), por exemplo. O método verifica se as propriedades not-null possuem conteúdo. Se alguma propriedade for NULL e não deveria ser o método retorna uma excessão informando os campos que deve conter algum valor.
  • ToDataTable – Este método recebe uma lista e transforma num DataTable. Ele constroi uma tabela onde as colunas serão o nome das propriedades do tipo de objeto da lista. Para as propriedades <many-to-one> ele cria também colunas para acomodar os valores das propriedades do relacionamento. O título da coluna fica algo assim: Paciente.Cidadao.Sexo.Descricao e o conteúdo do campo será a descrição do sexo do cidadão paciente. Se nos <many-to-one> tiver outros <many-to-one> novas colunas vão sendo criadas até chegar nas propriedades que não são relacionamentos, seguindo a mesma idéia citada acima para nome de colunas. E as linhas serão exatamente o conteúdo dos campos nas propriedades de acordo com título da coluna.
  • InsertSQL – Este método recebe um objeto persistente como parâmetro e retorna o SQL-ANSI correpondente para inserção do dado.
  • UpdateSQL – Este método recebe um objeto persistente como parâmetro e retorna o SQL-ANSI para alteração da linha correspondente ao objeto persistente no banco de acordo com a chave primária (não composta).
  • DeleteSQL – Este método recebe um objeto persistente como parâmetro e retorna o SQL-ANSI para exclusão da linha correspondente ao objeto persistente no banco de acordo com sua chave primária (não composta).

Estes três últimos métodos são interessante pra quem desejar fazer replicação assíncrona de dados baseado em log. Estes DML´s são guardados numa tabela de log´s, inclusive o início e fim de cada transação, para que um módulo replicador possa ler cada linha e executá-la no banco slave ou banco cópia.

A implementação que fiz para estes métodos depende da classe NHibernate.CFG.Configuration que configura o ambiente hibernate. Essa instância de configuração deve estar visível internamente em cada um dos métodos assima descritos. Dessa forma pode-se ler os arquivos hbm.xml para atingir os objetivos.

Se alguém tiver mais sugestões de métodos para nossa classe DAO pode postar aqui.

Valeu!!!!

0 Respostas para “Classe DAO genérica com Hibernate – (cont. II)”



  1. Sem comentários ainda

Deixe um comentário




Calendário

Junho 2008
D S T Q Q S S
« Mar   Jul »
1234567
891011121314
15161718192021
22232425262728
2930  

Desde (04/11/07)

  • 34,786 visitas