Escolar Documentos
Profissional Documentos
Cultura Documentos
TPICOS
PG
O que o Hibernate? O que preciso fazer para se trabalhar com o Hibernate? Como configurar o CLASSPH do projeto? Exemplo de organizao do projeto Exemplo de configurao do arquivo hibernate.cfg.xml Exemplo de mapeamento objeto relacional com arquivo XML Exemplo de mapeamento objeto relacional com anotaes Alguns recursos avanados de mapeamento com anotaes (falta) Erros comuns na configurao e uso do Hibernate
2 2 5 6 7 8 9 10
Pg. 1
O que o Hibernate?
O Hibernate um toolkit1 de persistncia2 open source3 cujo propsito prover um mecanismo para persistncia de objetos Java ou .Net em um banco de dados relacional. O site do projeto http://www.hibernate.org/, onde pode ser feito o download de qualquer verso do framework. As principais vantagens de se utilizar o Hibernate so: 1. Ele oferece vrios recursos que facilitam o mapeamento do modelo orientado a objetos para o relacional e vice-versa. Este processo conhecido como MOR ou mapeamento objeto relacional; 2. Estes recursos simplificam o trabalho de persistir e recuperar os objetos no modelo relacional, que bastante diferente do orientado a objetos no qual ns desenvolvemos a aplicao; 3. O Hibernate nos d a impresso de que estamos trabalhando com um SGBDOO durante o desenvolvimento da aplicao. Apesar de estarmos trabalhando, na verdade, com um SGBD relacional.
1: Toolkit pode ser entendido como um conjunto de ferramentas, como o prprio nome indica, voltadas soluo ou suporte de um tipo de problema/necessidade genrico; 2: O termo persistncia refere-se ao registro e manuteno dos dados em algum tipo de memria permanente, ou seja, os dados continuaro a existir depois que o programa encerrar a execuo, podero ser recuperados e modificados. 3: O termo open source refere-se a uma filosofia de construo de software cujo cdigo fonte aberto. Isto significa que o cdigo fonte est disponvel para que qualquer pessoa o possa ler e entender;
Pg. 2
DICAS: Depois de baixar tudo o que voc precisa, crie um diretrio no seu disco para servir de referencia aos projetos Java (por exemplo d:\java-frameworks). Em seguida descompacte os recursos baixados dentro dele; sempre recomendada a utilizao da ltima verso dos frameworks. Porm, se voc precisar de alguma verso anterior, elas sempre esto disponveis.
2. Configurao do CLASSPATH: De posse dos recursos adquiridos no site oficial do Hibernate, voc agora precisa acrescent-los ao seu projeto no Eclipse. Isto feito por meio da configurao do CLASSPATH4 do seu projeto Java. Veja em detalhes como fazer isso no tpico Como configurar o CLASSPATH do projeto? mais adiante. Por ora, vamos conhecer os pacotes (arquivos .jar5) necessrios ao seu projeto Java que vai utilizar o Hibernate. Voc precisar incluir no seu projeto os seguintes arquivos: O hibernate3.jar, que fica no diretrio raiz do Hibernate Core; Exemplo: d:\java-frameworks\hibernate-3.2\hibernate3.jar Todos os pacotes dentro do diretrio lib do Hibernate Core, que so as dependncias e recursos utilizados pelo Hibernate; Exemplo: d:\java-frameworks\hibernate-3.2\lib\* O hibernate-annotetions.jar, que fica no diretrio raiz do Hibernate Annotetions; Exemplo: d:\java-frameworks\hibernate-annotetions-3.3.0\hibernate-annotetions.jar Todos os pacotes dentro do diretrio lib do Hibernate Annotetions, que so suas dependncias; Exemplo: d:\java-frameworks\hibernate-annotetions-3.3.0\lib\* 3. Mapeamento Objeto Relacional: Tambm conhecido pela sigla MOR, como citado anteriormente. Consiste em se apontar a correspondncia que existe entre os atributos de uma classe (modelo OO) e os campos de uma tabela no banco de dados (modelo relacional). Isto torna possvel, por exemplo, a construo automtica de objetos a partir do retorno de uma consulta SQL. Podemos realizar o mapeamento por uma das seguintes tcnicas: Uso de XML: Consiste em se criar um arquivo XML para mapear cada classe de domnio do projeto cujos objetos sero persistidos. preciso acrescentar estes arquivos XML de mapeamento no arquivo hibernate.cfg.xml, para indicar a localizao fsica de cada um deles.
4: CLASSPAH uma varivel de ambiente que indica a localizao fsica das bibliotecas e classes externas que o projeto precisar utilizar; 5: Arquivos .jar so arquivos empacotados, ou seja, arquivos que servem de repositrio para outros arquivos. So utilizados em Java para agrupar, organizar e facilitar a difuso das classes de um projeto.
Pg. 3
A principal vantagem desta tcnica a separao do cdigo de mapeamento OR e o cdigo da classe de domnio (bean). A desvantagem que se trata de um processo mais trabalhoso e com uma quantidade maior de cdigo; Uso de Anotaes: Tambm conhecidas como annotetions uma forma prtica e fcil de fazer anotaes no cdigo Java, ou seja, de incluir metadados sobre uma classe dentro do prprio cdigo desta classe. Como vantagens, isto evita a criao de um novo arquivo para fazer o MOR, escreve-se bem menos cdigo e alguns defendem que haja mais legibilidade devido proximidade das informaes, ou seja, dos metadados e do cdigo Java. Tem a desvantagem, contudo, de misturar informaes do modelo relacional dentro da classe de domnio em Java. H tambm quem defenda que o cdigo fica menos legvel com esta mistura. 4. Configurao do Hibernate: H um arquivo especfico para a realizao desta tarefa chamado hibernate.cfg.xml. Neste arquivo voc deve informar, nas respectivas entradas, informaes como: A URL JDBC; O usurio e a senha de acesso ao banco; Os arquivos XML para mapeamento das classes de domnio (caso haja); As classes mapeadas com annotetions (caso haja) Vrias outras configuraes possveis.
O ideal que voc faa a sua configurao a partir de um arquivo hibernate.cfg.xml j existente, ou seja, a partir de um modelo que voc possa copiar e modificar para a sua necessidade. Isto torna erros bobos, como os de digitao, menos freqentes. O prprio Hibernate disponibiliza um modelo quando voc baixa o Hibernate Core. Esse modelo fica no diretrio etc. Exemplo: d:\hibernate-3.2\etc\hibernate.cfg.xml ATENO: Este arquivo deve ficar no diretrio raiz do seu projeto, em geral o diretrio src, para que o Hibernate funcione. Caso contrrio, voc receber uma erro com a mensagem /hibernate.cfg.xml not found.
Pg. 4
Pg. 5
O nome do usurio Na propriedade hibernate.connection.username; A senha do usurio Na propriedade hibernate.connection.password; Os arquivos XML que fazem o mapeamento das classes de domnio do seu projeto, caso haja, na propriedade mapping resource; As classes de domnio mapeadas por anotaes, caso haja, na propriedade mapping class.
Veja o arquivo-exemplo de uma configurao utilizando o gerenciamento do Pool de conexes do prprio Hibernate e o PostgreSQL como SGBD:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.url"> jdbc:postgresql://127.0.0.1:5432/aulas?charSet=LATIN1</property> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="hibernate.connection.username">postgres</property> <property name="hibernate.connection.password">senha</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!-Configura o hibernate para comparar as classes com as tabelas do banco e atualiza-las automaticamente:
--> <property name="hibernate.hdm2ddl.auto">update</property> <!-- Alternativa para gerenciamento do pool de conexes com o BD: O C3P0 --> <!-<property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">180</property> <property name="hibernate.c3p0.idle_test_period">100</property> --> <!-- Classes de domnio mapeadas com annotations: --> <mapping class="modelo.ClasseBean1" /> <mapping class="modelo.ClasseBean2" /> <!-- Classes de domnio mapeadas por XML: --> <mapping resource="modelo/ClasseBean3.hbm.xml"/> </session-factory> </hibernate-configuration>
Exemplo 02: Cdigo da classe JavaBean1 e cdigo XML para o mapeamento objeto relacional.
Pg. 8
@Entity //Indica que a classe uma classe persistente @Table(name = "tb_java_bean_1") // Indica em que tabela esto os dados Public class JavaBean1 { // atributos: @Id //Indica que trata-se da PK na tabela @GeneratedValue //que o valor ser gerado pelo banco @Column(name = "cl_atr1") //o nome da coluna na tabela private Integer atributo1; @Column(name = "cl_atr1") private String atributo2; // construtor padro: public JavaBean1() { super(); } // gets e sets: public Integer getAtributo1() { return atributo1; } public void setAtributo1(Integer atributo1) { this.atributo1 = atributo1; } public String getAtributo2() { return atributo2; } public void setAtributo2(String atributo2) { this.atributo2 = atributo2; } }
Pg. 9
Pg. 10
13. Erro NullPointerException at NomeDaClasee.setPropertyValues(AbstractEntityPersister.java): Ocorre quando um atributo da classe definido com um tipo primitivo e, ao carregar um objeto solicitado (consulta), um valor null retornado para este atributo. Como o null no pode ser atribudo a um primitivo o erro acontece. Para evitar este tipo de problema, no utilize tipos primitivos ao definir os atributos das suas classes de domnio. A figura 03 abaixo demonstra a ocorrncia deste erro;
Figura 03: Erro ao tentar atribuir null para um atributo de tipo primitivo.
Pg. 11