No post anterior criamos o ambiente da aplicação no Visual Studio. Criamos os sub-projetos e definimos as hierarquias de acesso que caracteriza o desenvolvimento em camadas.
Neste post iniciaremos a codificação do nosso projeto Agenda Telefônica On-Line. O primeiro projeto que iremos codificar é o AgendaTelefonica.OR. Este projeto (ou esta biblioteca) será formado pelas classes que farão o papel de transferência de dados (DTO) entre as camadas. Essas classes ou os objetos irão trafegar livremente entre as camadas levando e trazendo informações. Já discutimos isso no post anterior. Neste projeto também dever haver os arquivos de mapeamento do Hibernate. As classe que vamos criar são as nossas ferramentas de trabalho. Os arquivos de mapeamento são as ferramenta de trabalho de Hibernate. Para cada classe criada deve existir um arquivo .hbm.xml correspondente. Este arquivo possui regras para mapeamento da classe com o banco de dados (not-null, FK, PK, FK, tipos e tamanho dos campos, etc.). Na prática, os arquivos .hbm.xml representam exatamente os campos das tabelas do banco de dados com seus respectivos tipos e relacionamentos. As classes também são uma retratação deste mapeamento.
Para cada tabela do banco deve existir:
- Um arquivo .hbm.xml que corresponde ao mapeamento relacional do Hibernate com a tabela do banco;
- Um arquivo .cs (poderia ser em outra linguagem) da classe que também corresponde a tabela do banco de dados.
Por isso que eu chamo (eu e todo mundo que usa Hibernate) esse projeto de AgendaTelefonica.OR. O OR significa Objeto/Relacional. Como ainda não existe uma banco popularmente conhecido orientado a objeto, o Hibernate faz esse relacionamento pra nós. Ele transforma o paradigma relacional do banco de dados em orientado a objeto pra faciliar o desenvolvimento das aplicações. Tudo que nós faremos durante o desenvolvimento em orientação a objeto, será transformado pelo Hibernate em paradigma relacional (SQL) que é o que o banco efetivamente entende.
Então vamos criar os dois arquivos para cada tabela da nossa aplicação e inserí-lo no Visual Studio. Como escrever esses arquivos é uma tarefa repetitiva e metódica, é interessante que se trabalhe com gerador de código. Vamos utilizar o RSClass para gerar os arquivos. Este programa foi indicado para instalação no primeiro post deste tutorial.
A utilização do RSClass é bem simples. Ao executar o programa pela primeira vez deve-se configurar o ambiente. Acesse o menu Arquivo->Configuração e efetue as modificações necessárias. No meu caso ficou assim:
A pasta destino deve ser a pasta da solução criada pelo Visual Studio no post anterior. Note também que o no campo projeto o nome foi informado compatível com as camadas geradas no post anterior.
Feita as configurações, ainda no RSClass acesse o menu Gerar -> .OR, marque a opção Todas e clique no botão Gerar. Na caixa de diálogo confirme o destino informado pelo sistema e aguarde a informação de que tudo foi gerado com sucesso. Se o destino não tiver correto cancele a operação e reconfigure tudo na tela de configuração do programa.
Se tudo foi gerado corretamente, quando abrir no Visual Studio a nossa solução, vai encontrar algo assim (selecione o projeto AgendaTelefonica.OR, localize no Solution Explorer o botão “Show All Files” e clique nele):
Finalmente temos mais duas configurações a fazer:
- Incluir ou anexar ao projeto AgendaTelefonica.OR os oito arquivos gerados;
- Alterar as propriedades “Buid Action” dos arquivos .hbm.xml.
Vamos fazer isso. Selecione os oito arquivos e, com eles selecionados, clique em algum com o botão direito do mouse e clique na opção “Include in project“. Depois selecione apenas os arquivos com .hbm.xml e, com eles selecionados, clique em algum deles com o botão direito do mouse e clique na opção “Properties”. Quando a aba de propriedades aparecer, mude o “Build Action” para “Embedded Resource“.
Essa mudança fará com que os arquivos do hibernate seja embutidos na bliblioteca da classe durante a compilação. É comum esquecer de realizar este processo. Na execução da aplicação, o Hibernate vai gerar uma exceção (um erro) que muitas vezes não é tão fácil de identifcar que o problema é não ter alterado a propriedade Build Action dos .hbm.xml. Por isso FIQUE ATENTO A ESTE PASSO. Se tudo foi feito corretamente o Solution Explorer estará assim:
E a propriedade Build Action de todos os .hbm.xml estarão assim:
Mais uma coisa: vamos adicionar uma outra biblioteca ao projeto AgendaTelefonica.OR. Clique com botão direito do mouse sobre o projeto e selecione “Add Reference…”. Localize o arquivo Regisoft.dll que está em ‘Bibliotecas‘ na pasta de instalação do RSClass e adicione ao projeto.
Pronto. Vencemos mais esta etapa. Já temos nossa blibioteca com as classes e mapeamento para Hibernate. Inclusive as classes dessa biblioteca irão servir como objetos de transferência de dados (DTO). Tente compilar/executar a solução. Não deve dar nenhum erro, no máximo um um aviso informando que não há nenhum projeto que possa ser executado. Normal… Afinal são apenas Class Library.
Também é interessante que voce abra os arquivos .cs e os arquivos .hbm.xml gerados e tente identificar os componentes comparando com as tabelas do banco de dados. Se voce desejar se aprofundar neste conhecimento, abaixo, tem um link para uma excelente apostila sobre o entendimento do Hibernate e suas configurações nos arquivos de mapeamento. Vale apena olhar. Fala sobre o Hibernate do Java, mas a compreensão é a mesma para o NHibernate do .NET.
Clique aqui e veja a apostila.
No próximo post vamos trabalhar com o projeto AgendaTelefonica.DAO e AgendaTelefonica.Interface, na pasta DAO. Vamos criar os DAO´s e as interfaces para os mesmos.
Até lá.



Olá, amigo. Muito boas as dicas. NHibernate é pra mim até hoje um cartãozinho de visitas do Demônio. Entretanto, o projeto no qual estou empenhado atualmente demanda o uso desse artifício, motivo pelo qual aguardo ansiosamente pelos próximos posts
Abraço
Olá Reginaldo!
Obrigado pelo empenho nesses artigos sobre o NHibernate! estou trabalhando no meu projeto do TCC utilizando NHibernate e tenho achado poucos materiais na NET…
Novamente muito obrigado e parabéns!
Welkson Renny
Natal/RN
Ótimo artigo. Mas estou com um grande problema. Toda vez que executo o MyGeneration o PC todo trava! Não sei como resolver isso!
Parabéns pelo artigo !!!
Ainda bem que existe pessoas como você para nos ajudar com o mapa da mina.
Abraços