Sejam bem vindos, esta e a decima setima aula de Programacao Web em Java.Depois que vimos uma aplicacao funcionando, vamos agora detalhar cada parte do processo. Nosso estudo de caso sera o sistema de busca, porem iremos incrementa-lo significativamente.Decima Setima Aula: Hibernate e Camada ModelComecemos estudando a camada Model, ou modelo: O objetivo desta camada e definir as entidades envolvidas e as regras de negocio do programa. Em orientacao a objeto, nao nos preocupamos inicialmente com a interface do programa, mas sim de um modelo de representacao das entidades que fazem parte do projeto. Uma abordagem pedagogica para atacar o problema e escrever de inicio um lista de requisitos do sistema, discutindo o que ele precisara ter:Permitir o usuario digitar uma palavra chave e obter uma lista de sites que possuem relacao com a palavra digitada usando o motor de busca;Permitir um usuario cadastrar um ou mais sites definindo uma lista limitada de palavras chaves relacionadas com seu site;Permitir um administrador do sistema corrigir, adicionar ou eliminar algum site cadastrado no sistema;Esta sera a lista de requisitos que usaremos no nosso exemplo. Para construir o modelo devemos olhar esta lista e identificar as entidades necessarias. Uma abordagem e olhar os substantivos. Estes serao entidades candidatas:usuario, palavra chave, lista de sites, site, lista de palavras chaves, administrador, sistema de busca, cadastro Esta e uma lista preliminar, ja eliminando repeticoes. O passo seguinte e separar o que e atributo, do que e classe, ficando somente as classes:Usuario (administrador e um tipo de usuario especial)Site (Lista de palavras chave e um atributo do site. Lista de Sites e uma colecao de sites)Motor de buscaCadastro de SitesDepois disso iremos definir quais atributos sao importantes para estas classes funcionarem de acordo com os requisitos.Usuario: Id, Nome, Apelido, Senha, Email, NivelSite: Id, Nome, Descricao, Url, KeyWords, Responsavel (pelo cadastro)Motor de Busca: Resultado da Busca, KeyWords (a serem encontrados)Cadastro de Sites: Usuario responsavelImplementamos entao as classes de modo que sejam manipulaveis pelo Hibernate. Este framework e responsavel pela persistencia, isso e, pelo armazenamento dos objetos criados na memoria, para o banco de dados relacional. As regras para que as classes sejam manipulaveis pelo Hibernate sao os seguintes:A classe devera ser um Java Bean definindo os atributos como dados privados e com funcoes publicas Getters e Setters. (veja em wikipedia as regras de uma classe Java Bean);A classe devera ter um construtor sem parametros para permitir o Hibernate criar objetos;Deve possuir uma chave primaria: isso e um campo id que armazenara um valor unico que sera gerado pelo Hibernate. A funcao setID() e privada, pois somente o Hibernate devera modificar o campo chave.A classe Motor de Busca e cadastro de Site nao sera persistido. Ja que nao e necessario a manutencao da busca realizada entre as chamadas.No nosso exemplo teremos uma nova classe Usuario:Usuario.classObserve no codigo que criei uma propriedade sites com um HashSet. Esta propriedade ira auxiliar durante a manutencao dos sites que um usuario possui.private Set sites = new HashSet();E criamos o arquivo Usuario.hbm.xml na pasta sbusca. Este arquivo indica ao Hibernate o funcionamento da persistencia da classe