quarta-feira, 22 de agosto de 2007

Criando tabelas automaticamente com o Hibernate/JPA em 10 Passos

Olá pessoal,

Já faz algum tempo venho "brincando" com Hibernate. Ele nada mais é do que um framework ORM (Object Relational Mapping), que auxilia na camada de persistência dos dados. Deixar de lado ou melhor com o Hibernate o SQL do seu projeto é uma verdadeira mão na roda. Com certeza é um framework indispensável, sem duvida alguma.
Estive pensando como poderia fazer para tentar passar algo sobre o assunto. Então foi onde resolvi criar um pequeno exemplo.

Objetivo:
Criar um projeto teste, contendo uma classe, fazer as anotações necessárias para o Hibernate/JPA e então com esta classe criar as tabelas no Bando de Dados. Let's go!

Recursos utilizados
IDE: Eclipse Europa (Já fui fã incondicional do Netbeans)
Banco de dados: MySql

Jars:
hibernate3.jar / commons-collections-2.1.1.jar / commons-logging-1.0.4.jar / dom4j-1.6.1.jar / log4j-1.2.11.jar (Hibernate Core)
ejb3-persistence.jar / hibernate-annotations.jar (Hibernate Annotations)
mysql-connector-java-5.0.4-bin.jar (MySql)


Referências
www.hibernate.org
http://blog.caelum.com.br/video/jpa/beginning-with-jpa.html



1° Passo
Criar um projeto java no Eclipse (Java Project) chamado HibernateTeste
2° Passo
Criar uma pasta lib na raiz do projeto (Esta pasata colocaremos os Jars)
3º Passo
Copie os jars e cole na pasta lib no Eclipse (Isso mesmo, Ctrl+c Ctrl+v), após os jars colados na pasta, selecione todos os jars dentro de lib, clique com o botão direito e depois em Add Build Path
4° Passo
Cole o arquivo log4j.properties (Abaixo)dentro do diretório sources (src)
[code]
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
[/code]



5° Passo
Criar/Colar hibernate.cfg.xml (Eu acho mais fácil colar) dentro da pasta META-INF














6° Passo
Criar pacote br.com.hibernateteste

7° Passo
Crie uma classe Usuario
[code]
package br.com.hibernateteste;
public class Usuario {
public String login;
public String senha;
public String nome;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
[/code]

8° Passo
Faça os imports e coloque as notações na classe Usuário
[code]
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Usuario {
@Id
public String login;
public String senha;
public String nome;
//Getters and Setters omitidos
}
[/code]

9° Passo
Cria a Classe GeraBanco (Pode ser no mesmo pacote)
[code]
package br.com.hibernateteste;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class GeraBanco {
public static void main(String[] args) {
Configuration conf = new AnnotationConfiguration();
conf.configure();
SchemaExport se = new SchemaExport(conf);
se.create(true, true);
}
}
[/code]

10° Passo
Execute a classe GeraBando.java

Acesse seu MySql e visualize a tabela Usuario criada no esquema Test

2 comentários:

Alexsander Gidsicki disse...

Ajudou mas ficou sem detalhes. Mas foi valido.

Beto disse...

Ricardo aqui não funcionou
abr 23, 2015 9:54:01 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
abr 23, 2015 9:54:01 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
abr 23, 2015 9:54:02 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
abr 23, 2015 9:54:02 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
abr 23, 2015 9:54:02 PM org.hibernate.dialect.Dialect
INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
abr 23, 2015 9:54:02 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export
abr 23, 2015 9:54:02 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)