Páginas

sexta-feira, 30 de agosto de 2013

Mapeamento de Herança com Hibernate

Olá tudo bem ?

Nesse post irei falar sobre Mapeamento de Herança com Hibernate.

As três estratégia que pode ser feita para realizar o mapeamento de herança:

1.1 SINGLE TABLE
1.2 JOINED
1.3 TABLE PER CLASS


Antes de começar a apresentar cada um, irei mostrar qual exemplo iremos fazer para testar cada estratégia.

Vamos fazer um exemplo com Pessoa, Professor e Aluno.
Pessoa será a super classe seguidas das sub classe Professor e Aluno.

1.1 Single Table: Essa estratégia é a mais utilizada e possibilita um maior desempenho para realizar consultas no banco de dados.

Pessoa.java
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Pessoa {
 
 @Id
 @GeneratedValue
 private Long codigo;
 
 @Column(name="nome")
 private String nome;
        
          //getters e setters
}
Professor.java
@Entity
public class Professor extends Pessoa {

 private String disciplina;
 
 @Column(name="carga_horaria")
 private int cargaHoraria;

          //getters e setters
}
Aluno.java
@Entity
public class Aluno extends Pessoa{
 
 private String turma;

         //getters e setters
}

Todas as classe tem anotação @Entity para que seja criada as tabelas no banco de dados. Como estamos usando a estratégia SINGLE_TABLE só será criada uma única tabela com todos os campos de todas as classes que extends da classe Pessoa.
A classe Pessoa foi criada como classe abstract para que ela não possa ser instanciada, porque não faz sentido instanciar uma classe do tipo Pessoa, sendo que não temos um tipo Pessoa definido.
Ex: O mesmo seria um exemplo de uma super Classe Animal aonde é seguida por suas sub classe Cachorro, Gato etc.. Não faz sentido instanciar uma classe do tipo animal, que tipo de animal é esse?

Observe a anotação @Inheritance seguida por (strategy = InheritanceType.SINGLE_TABLE) essa anotação serve para definir o tipo Single_Table.

Faça o teste:
public class Principal {
 public static void main(String[] args) {
  
  EntityManagerFactory factory = Persistence.createEntityManagerFactory("Herança");
  EntityManager manager = factory.createEntityManager();
  
  manager.getTransaction().begin();
  
  Professor professor1 = new Professor();
  professor1.setNome("Rafael Braga");
  professor1.setDisciplina("Programação para Internet");
  professor1.setCargaHoraria(20);
  
  Aluno aluno1 = new Aluno();
  aluno1.setNome("Jardel");
  aluno1.setTurma("ADS");
  
  manager.persist(professor1);
  manager.persist(aluno1);
  
  manager.getTransaction().commit();
  
  manager.close();
  factory.close();
 }
}

Verifique no banco de dados a tabela criada e seus valores.

Veja que foi criado uma coluna do tipo DTYPE, ela é utilizada para identificar qual tipo de objeto se refere a qual classe.

Desvantagem: A desvantagem desse tipo de estratégia é que consumo de espaço desnecessário na tabela.
Quando cadastramos o Professor veja que o campo turma da classe Aluno também está na tabela e não tem nenhum valor. Ou seja ele está ocupando espaço e não vai ser utilizado.
O mesmo acontece quando cadastramos Aluno, os campos da classe Professor também aparece na tabela ocupando espaço e não vai ser utilizado.

1.2 JOINED: Essa estratégia ela cria um tabela para cada classe que extends da classe principal.
No nosso exemplo será criado as tabelas da classe Pessoa, Professor e Aluno.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
Desvantagem: As consultas para esse tipo de estratégia são lentas, será necessário utilizar operação de join, para pegar os dados cadastrado nas tabelas.
Informações sobre consultas utilizando Join, Inner Join, Left Join no link clique aqui

1.3 TABLE PER CLASS: Essa estratégia uma tabela para as classes concreta é criada.
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

Modifique também o tipo de valor gerado que está sendo utilizado na tabela Pessoa.
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long codigo;
 

Desvantagem: Não existe informações de uma tabela para outra. Veja que temos agora a anotação @GeneratedValue(strategy = GenerationType.TABLE) não podemos mais utilizar geração automática de chave primária.


Obrigado pela visita =D

Duvidas, Críticas e Sugestões, só comentar ;)

terça-feira, 27 de agosto de 2013

Mapeamento de entidade com Hibernate


Olá tudo bem ?

Nesse post vou falar sobre mapeamento de entidades com hibernate.

Primeiramente crie um projeto Dynamic Web Project na IDE, adicione os jar do hibernate, tambem nao esqueça de adicionar o jar do banco de dados.

Configure o arquivo persistence.xml, para adicionar ao seu projeto (alt + enter) em cima do projeto > Project Facets > marque a opção JPA > Aplly > OK.

Crie uma database mapeamento

persistence.xml



  
  
   
   
   
   
   
   
   
  
 


Verifique o usuario e a senha do seu banco se corresponde com a mesma utilizada.

1.1 OneToOne
1.2 OneToMany
1.3 ManyToOne
1.4 ManyToMany

Vamos começar com relacionamento OneToOne (Um para Um).

1.1 OneToOne

No relacionamento OneTone (Um para Um), irei fazer como exemplo um relacionamento entre País e Presidente se "em caixa" perfeitamente nessa condição, aonde um País pode ter apenas um Presidente e um Presidente só pode administrar um País.

1.1.1 Vamos criar uma classe chamada País dentro do package br.com.vejajava.entidades
@Entity
@Table(name="pais")
public class Pais {
 
 @Id
 @GeneratedValue
 private Long id;
 
 private String nome;
 
 private String capital;
 
 @OneToOne
 private Presidente presidente;
 
 
 @Column(name="lingua_oficial")
 private String linguaOficial;
 
 private String populacao;

         // getters e setters
}
Podemos ver que na nossa classe País temos a anotação @OneToOne isso faz com que o relacionamento entre Pais e Presidente aconteça no banco de dados.
Observe que o tipo de dado que é feita no relacionamento com Presidente é do tipo Presidente e não um tipo primitivo.

1.1.2 Vamos criar uma classe chamada Presidente dentro do package br.com.vejajava.entidades
@Entity
@Table(name="presidente")
public class Presidente {
 
 @Id
 @GeneratedValue
 private Long id;
 
 private String nome;
 
 @OneToOne
 private Pais pais;

         // getters e setters
Observe que temos o mesmo tipo referenciado na classe Presidente, com anotação @OneToOne isso faz com que o relacionamento entre Pais e Presidente aconteça no banco de dados.

Temos que definir qual classe mandará no relacionamento.

Para resolver esse problema temos um elemento chamado mappedBy que é um relacionamento bidirecional, significa que tanto na classe Pais como na classe Presidente podemos carregar-lás.
Lembrando que toda a classe que faz um relacionamento e tenha essa função (mappedBy) ela nao mandará no relacionamento.

O relacionamento na classe Presidente ficará assim:
@OneToOne(mappedBy= "presidente")
private Pais pais;

No exemplo feito teria a foreing key presidente_id na tabela Pais, para modificar o nome desse campo existe uma anotação chamada @JoinColumn.

Ex:
@JoinColumn(name="pres_id")


1.1.3 Vamos criar uma classe chamada TesteOneToOne dentro do package br.com.vejajava.principal para fazer o teste do nosso relacionamento.


public class TesteOneToOne {
 public static void main(String[] args) {
  
  EntityManagerFactory factory = Persistence.createEntityManagerFactory("Mapeamento");
  EntityManager manager = factory.createEntityManager();
  
  manager.getTransaction().begin();
  
  Presidente presidente = new Presidente();
  presidente.setNome("Dilma R");
  
  Pais pais = new Pais();
  pais.setNome("Brasil");
  pais.setCapital("Brasília");
  pais.setLinguaOficial("Português");
  pais.setPopulacao(193.946886);
  
  pais.setPresidente(presidente);
  
  manager.persist(pais);
  manager.persist(presidente);
  
  manager.getTransaction().commit();
  
  manager.close();
  factory.close();
 }
}

Podemos observa que criamos uma instancia de Presidente e Pais e passamos os valores para eles.
Observe que pais.setPresidente(presidente) ele pega o valor passado quando criamos um novo Presidente.
Nao podemos fazer o mesmo para Presidente pois quem manda no relacionamento é classe País.

Observe que temos que persistir os dois objetos
manager.persist(pais);
manager.persist(presidente);
Com o elemento (Cascade = CascadeType.PERSIST) na classe Pais so bastaria persist o objeto do tipo Pais.

Veja como ficaria o elemento Cascade.

@OneToOne(cascade = CascadeType.PERSIST)
private Presidente presidente;

Se tudo ocorrer bem no seu banco de dados vai ter os seguintes valores:

mysql> select * from pais;
+----+-----------+----------------+--------+------------+---------------+
| id | capital | lingua_oficial | nome | populacao | presidente_id |
+----+-----------+----------------+--------+------------+---------------+
| 1 | Brasília | Português | Brasil | 193.946886 | 1 |
+----+-----------+----------------+--------+------------+---------------+
mysql> select * from presidente;
+----+---------+
| id | nome |
+----+---------+
| 1 | Dilma R |
+----+---------+

1.2 OneToMany

No relacionamento OneToMany(Um para Muitos), irei fazer como exemplo um relacionamento entre Escola e Aluno se "em caixa" perfeitamente nessa condição, aonde uma Escola pode ter vários Alunos.

1.2.1 Vamos criar uma classe chamada Escola dentro do package br.com.vejajava.entidades

@Entity
@Table(name="escola")
public class Escola {
 
 @Id
 @GeneratedValue
 private Long id;
 
 private String nome;

        @OneToMany(cascade = CascadeType.PERSIST)
 private Collection alunos = new ArrayList();
 
       //getters e setters
}
Observe que na classe Escola só temos 2 atributos, coloquei apenas esses dois pra entender melhor o relacionamento.
Temos uma Coleção de Alunos seguido da anotação @OneToMany, (Um para Muitos) aonde uma Escola pode ter varios alunos, temos também o elemento cascade = CascadeType.PERSIST faz com que quando o objeto escola for persistido ele automaticamente persist todos os campos que está fazendo o relacionamento entre escola e aluno. Esse relacionamento so pode ser carregado na classe Escola pois nao é um relacionamento bidirecional, para que seja um relacionamento bidirecional seria necessário adicionar o mappedyBy no relacionamento @OneToMany.

1.2.2 Vamos criar uma classe chamada Aluno dentro do package br.com.vejajava.entidades

Nessa classe vamos aprofundar mais um pouco e entender a anotação @Embedded

@Entity
@Table(name="aluno")
public class Aluno {
 
 @Id
 @GeneratedValue
 private Long id;
 
 private String nome;
 
 @Embedded
 private Endereco endereco;
         
         //getters e setters
}
Observe que na classe Aluno temos a anotação @Embedded essa anotação faz com que eu possa criar uma classe com as informações do endereço do aluno, sem a necessidade de criar outra tabela. Ela pega todos os atributos da classe endereco que será criada e coloca dentro da propria tabela aluno, essa é uma maneira muito interessante para organização do seu sistema.
Criando uma classe para colocar todas as informações de endereço para organizar, caso houver que mudar algum campo que referencia o endereco do aluno só precisaria alterar a classe endereco;

1.2.3 Vamos criar uma classe chamada Endereco dentro do package br.com.vejajava.entidades

@Embeddable
public class Endereco {

 private String rua;
 
 private int numero;
 
 private String cep;
      
         //getters e setters
}
Observe que no lugar da anotação @Entity temos a anotação @Embeddable isso faz com que nao seja criado uma tabela endereco no banco de dados e todos os campos dessa classe será criado na tabela Aluno, veja também que não precisamos definir uma primary key para essa classe.

1.2.4 Vamos criar uma classe chamada TesteOneToMany dentro do package br.com.vejajava.principal para fazer o teste do nosso relacionamento.

public class TesteOneToMany {
 
 public static void main(String[] args) {
  
  EntityManagerFactory factory = Persistence.createEntityManagerFactory("Mapeamento");
  EntityManager manager = factory.createEntityManager();
  
  manager.getTransaction().begin();
  
  Endereco endereco = new Endereco();
  endereco.setRua("Rua 27");
  endereco.setCep("65364-972");
  endereco.setNumero(444);
  
  Aluno aluno = new Aluno();
  aluno.setNome("Maria Eduarda");
  aluno.setEndereco(endereco);
  
  Escola escola = new Escola();
  escola.setNome("São Francisco das Chagas");
  escola.getAlunos().add(aluno);
  
  manager.persist(escola);
  manager.getTransaction().commit();
  manager.close();
  factory.close();
  
 }
Criamos uma instancia de endereco e passamos os valores nos campos.
Observe que a partir de aluno conseguimos pegar todos os valores passado na classe endereco com aluno.setEnderco(endereco).
Fizemos o mesmo para escola, instanciamos a classe passamos os valores e adicionamos na coleção o objeto aluno para que o id do aluno seja referenciado na tabela.

Observe no banco de dados que foi criado uma terceira tabela chamada escola_aluno aonde é passado o id da escola e o id de aluno.

Veja tambem que nao foi preciso persistir o objeto aluno, o elemento cascade = CascadeType.PERSIST como foi explicado anteriormente ele persist todos os objetos que se referencia a classe escola e aluno.

Se tudo ocorrer bem no seu banco de dados vai ter os seguintes valores:

mysql> select * from aluno;
+----+-----------+--------+--------+---------------+
| id | cep | numero | rua | nome |
+----+-----------+--------+--------+---------------+
| 1 | 65364-972 | 444 | Rua 27 | Maria Eduarda |
+----+-----------+--------+--------+---------------+

mysql> select * from escola;
+----+---------------------------+
| id | nome |
+----+---------------------------+
| 1 | São Francisco das Chagas |
+----+---------------------------+

mysql> select * from escola_aluno;
+-----------+-----------+
| escola_id | alunos_id |
+-----------+-----------+
| 1 | 1 |
+-----------+-----------+


1.3 ManyToOne

No relacionamento ManyToOne (Muitos para UM), irei fazer como exemplo um relacionamento entre Filme e Categoria se "em caixa" perfeitamente nessa condição, aonde muitos Filme pode ter uma Categoria.

1.3.1 Vamos criar uma classe chamada Filme dentro do package br.com.vejajava.entidades

@Entity
@Table(name = "filme")
public class Filme {

 @Id
 @GeneratedValue
 private Long id;

 private String nome;

 @Temporal(TemporalType.DATE)
 @Column(name="data_cadastro")
 private Date dataCadastro;

 @ManyToOne
 private Categoria categoria;

           //getters e setters
}

Observe que temos uma anotação que ainda nao foi usada no projeto. @Temportal(TemporalType.DATE) no campo dataCadastro. A anotação TemporalType.DATE faz com que seja salvo no banco de dados a seguite data 2013-08-28.
Tambem temos anotação @ManyToOne que faz com que mais de um filme pode ter uma categoria.

Outros tipos de TemporalType:
TemporalType.DATE = data (dia, mês e ano).
TemporalType.TIME = Horário (hora, minuto e segundo)
TemporalType.TIMESTAMP (Padrão) = Data e Horário


1.3.2 Vamos criar uma classe chamada Categoria dentro do package br.com.vejajava.entidades

@Entity
@Table(name="categoria")
public class Categoria {
  
 @Id
 @GeneratedValue
 private Long id;
 
 private String descricao;

           //getters e setters
}
Na classe categoria temos apenas o campo id que se refere a primary key da tabela e a descricao que será o nome categoria.

1.3.3 Vamos criar uma classe chamada TesteManyToOne dentro do package br.com.vejajava.principal para fazer o teste do nosso relacionamento.

public class TesteManyToOne {
 public static void main(String[] args) {
  
  EntityManagerFactory factory = Persistence.createEntityManagerFactory("Mapeamento");
  EntityManager manager = factory.createEntityManager();
  
  manager.getTransaction().begin();
  
  Categoria categoria = new Categoria();
  categoria.setDescricao("Infantil");
  
  Filme filme = new Filme();
  filme.setNome("Pokémon");
  filme.setDataCadastro(new Date());
  filme.setCategoria(categoria);
  
  manager.persist(filme);
  manager.persist(categoria);

  manager.getTransaction().commit();
  
  manager.close();
  factory.close();
 }
}
Instanciamos a classe categoria e passamos o valor no campo descricao.
O mesmo foi feito na classe Filme o campo data ao ser salvo no banco registrará a data atual do máquina.
Veja também que passamos o valores da Categoria para o objeto filme.
Persistimos os dois objetos e depois fizemos o commit.

Se tudo ocorrer bem no seu banco de dados vai ter os seguintes valores:

mysql> select * from filme;
+----+---------------+----------+--------------+
| id | data_cadastro | nome | categoria_id |
+----+---------------+----------+--------------+
| 1 | 2013-08-28 | Pokémon | 1 |
+----+---------------+----------+--------------+

mysql> select * from categoria;
+----+-----------+
| id | descricao |
+----+-----------+
| 1 | Infantil |
+----+-----------+

o tópico 1.4 ManyToMany vou explicar criando o projeto exclusivo para esse mapeamento em outro post.

Obrigado pela visita.

Duvidas, Criticas e Sugestões ?

=D

segunda-feira, 26 de agosto de 2013

Projeto simples Hibernate + JPA + MySQL


Olá tudo bem ?

Nesse post iremos ver alguns comandos para manipular entidades.

Vamos criar um projeto simples utilizando Hibernate + JPA + MySQL.

1.1 Crie um projeto Java Project chamado Pessoa

Criado o projeto primeiramente crie uma pasta chamada lib para adicionar os jar do hibernate e o driver MySQL.
Dentro do arquivo lib coloque os jar e lembrando novamente nao esqueça de adicionar o jar do banco que irá utilizar.

Abra o arquivo persistence e adicione as seguintes configurações.
Dica: Adicione JbossTools na IDE que facilita a configuração.


  
   
   
   
   
   
   
   
   
   

  
 

1.2 Abra o MySql e crie a database Aula1

create database Aula1

1.3 Crie uma classe Pessoa dentro de um package chamado br.com.vejajava.entidades

@Entity
@Table(name="pessoa")
public class Pessoa {
 
 @Id
 @GeneratedValue
 private Long id;
 
 @Column(name="nome", length=50, nullable=false)
 private String nome;
 
 @Column(name="idade")
 private Integer idade;

 //get e set

dica para gerar get e set mais rapido.
Ctrl + 3 digite gg select getters and setters >select all > ok.

Se voce tiver adicionado o JPA no project, veja que está dando um erro na classe, isso porque temos que adicionar no arquivo persistence a classe que está sendo mapeada. Para isso adicione antes de propreties

br.com.vejajava.entidades.Pessoa

@Entity funciona para que a classe que está sendo mapeada seja criada no banco de dados.
@Table no meu caso nao era necessaria, se nao tivesse ela criaria a tabela pessoa automaticamente com p 'minusculo', coloquei so para melhor entendimento, poderia modificar o nome da classe para "tb_pessoa".
@Id O atributo que tem essa anotação sera a chave primária da tabela.
@GeneratedValue esse campo será um auto incremente. por padrão ele utiliza Auto incremente. Mas você pode modificar para identity basta passar a seguinte anotação (strategy = GenerationType.IDENTITY).
@Column foi passado 3 valores name que vai representar qual nome que esse atributo vai ter na minha classe, length o tamanho dele e nullable que nao permite valor null.

1.4 Crie uma classe PessoaMain dentro do package br.com.vejajava.principal

Persistindo

public class PessoaMain {
 public static void main(String[] args) {

  EntityManagerFactory fabrica = Persistence.createEntityManagerFactory("Aula1");
  EntityManager manager = fabrica.createEntityManager();

  manager.getTransaction().begin();
  
  Pessoa p1 = new Pessoa();
  p1.setNome("José");
  p1.setIdade(50);
  
  manager.persist(p1);
  manager.getTransaction().commit();
  
  manager.close();
  fabrica.close();
 }
}

Criamos uma fabrica de entityManager depois pegamos a configuração do banco de dados que está no arquivo persistence e passamos no parametro o nome persistence-unit que identifica o arquivo.

Depois iniciamos uma transação com begin;
criarmos um objeto p1 do tipo Pessoa;
passamos alguns valores para eles;
persistimos esses valores;
commitamos para o banco de dados;
fechamos a conexão do manager.


Verifique no banco de dados a tabela pessoa criada.
Faça um Select * from Pessoa para verificar todos os campos cadastrado.

Buscando

Utilizando método find para buscar dado cadastrado.

Pessoa p1 = manager.find(Pessoa.class, 1L);  
System.out.println(p1.getNome());

Veja na saída do console o nome da pessoa cadastrada no banco de dados, no meu exemplo: José

Estamos utilizamos apenas o find, mas poderiamos buscar os dados utilizando o getReference. Lembrando que no getReference voce deve passar uma referencia ao objeto, no caso p1. String nome = p1.getNome();
Vamos ver em outros post a diferença entre find & getReference e ver quando eles passa para um estado Managed e o tipo do seu comportamento. (EAGER E LAZY)

Alterando

Pessoa p1 = manager.find(Pessoa.class, 1L);  
p1.setNome("Carlos");
p1.setIdade(22);

Alteramos o nome da Joao para Carlos e a sua idade.

Podemos também utilizar uma funcionalidade muito poderosa do hibernate que é a chamada Query.
Com a Query podemos realizar consultas ao banco de dados.

Listando

Query query = manager.createQuery("select p From Pessoa p");
List pessoas = query.getResultList();
for (Pessoa pessoa : pessoas) {
System.out.println("Nome: " + pessoa.getNome() + "\nIdade: " + pessoa.getIdade());
}

Podemos tambem limitar o numero de resultado cadastrado no banco.
OBS: Insira mais pessoas no banco de dados para fazer o teste.
Vamos supor que temos 10 pessoas cadastrada no banco de dados e que nao gostariamos de buscar todos eles e sim apenas os 3 primeiros.
Utilizando o metodo setMaxResults voce consegue capturar quantos objetos voce quiser do banco.

A vantagem de utilizar esse tipo de consulta é que o hibernate ele contem sua propria linguagem de consulta chamada JPQL, que serve para buscar os dados de qualquer tipo de linguagem de banco de dados, entao nao importa se voce está utilizando o banco MySQL, SQL, Oracle, que ele consegue atraves da sua propria JPQL buscar os dados cadastrado no banco de dados.

Query query = manager.createQuery("Select p From Pessoa p order by p.nome asc");
query.setMaxResults(3);
List pessoas = query.getResultList();
for (Pessoa pessoa : pessoas) {
System.out.println("Nome: " + pessoa.getNome() + " \nIdade: " + pessoa.getIdade());

Veja que passamos no parametro createQuery a consulta que queremos realizar, buscar todos o dados cadastrado no banco de dados e utilizando o ordey by para que ele ordene por nome os dados cadastro para fazer a consulta. Lembrando que o metodo setMaxResult ele busca os primeiro dados cadastro.

Removendo

Pessoa p1 = manager.find(Pessoa.class, 3L);
manager.remove(p1);

Verifique no banco que foi removido o objeto que tinha a ID 3;

É isso galera, espero que tenham entendido. Q
Qualquer duvida só postar nos comentários.

Obrigado, até a proxíma!

Criticas e Sugestões são bem vindas para melhorar o blog ;)

Obrigado pela a visita. =D

sábado, 24 de agosto de 2013

Hibernate e JPA

Olá tudo bem?

Esse é meu primeiro post aqui no blog.

Primeiramente vamos entender o que é ser um ORM (Mapeamento de Objeto-Relacional).
É uma forma de persistir objetos que é representada nas tabelas no banco de dados, usando Hibernate você poderá realizar esse mapeamento entre o banco de dados e objeto.
Esse mapeamento pode ser feito com xml ou melhor ainda, com Anotação.

Hibernate é uma ferramenta para realizar mapeamento de objeto relacional. Ele é capaz de gerar as tabelas no banco. Existem outras como EclipseLink, TopLink etc.
Todas essas ferramentas devem seguir a especificação JPA.

JPA (Java Persistence API) é implementada pelas tecnologias ORM. Especificação JPA trata-se de Mapeamentos, Interfaces, Entidades para gerenciar a persistência de linguagem de consulta.

Configuração do Hibernate

Para configurar o hibernate primeiramente é necessário baixar os jar do hibernate, segue o link download http://sourceforge.net/projects/hibernate/files/hibernate3/.
Precisamos baixar algumas dependência do hibernate como o jar slf4j-log4j12-1.5.8.jar, segue o link http://www.slf4j.org/dist/ e também precisamos do jar do Log4J 1.2.x. segue o link http://logging.apache.org/log4j/1.2/download.html.

Depois de feito o download crie uma pasta chamada lib na raiz da sua aplicação, e cole todos os jar, botão direito em cima Build Path > Add Build Path.

Para configuramos o hibernate na aplicaçao devemos criar um arquivo chamado persistence.xml que fica na pasta META-INF dentro de Src para ativar automaticamente esse arquivo aperte Alt+Enter em cima do projeto será direcionado uma caixa Properties clique em Project Facets e marque JPA.

No arquivo Persistence.xml voce configura baseado na necessidade dos seus projeto, vou postar um exemplo e fala um pouco de cada função para melhor entendimento.


	
		br.com.vejajava.entidades.Pessoa
		
			
			
			
			
			
			
			
			
		
	


Aqui declaramos qual classe vai fazer parte desse relacionamento (nomedopackage+nomedaclasse).
br.com.vejajava.entidades.Pessoa

O name do persistence-unit, serve para voce identificar qual persistence.xml será mapeada no seu projeto.

Exemplo:
 EntityManagerFactory fabrica = Persitence.createEntityManagerFactory("AulaJPA");
 EntityManager manager = fabrica.createEntityManager();

Como exemplo estou fazendo uma configuração com MySQL.
Veja a primeira configuração

hibernate.dialect: Classe Dialect ensina o hibernate a conversar com o meu banco de dados. Todos os bancos precisa ter uma classe Dialect para que o hibernate consiga ter esse feedback com o banco de dados.

driver_class: O nome do driver que representa seu banco de dados.

url: Veja que estou utilizando um servidor local com a porta do meu banco MySQL 3306, verifique qual a porta do banco que voce irá utilizar, em seguida o nome da minha database criada no banco de dados.

username: usuario do banco.
password: password do bancos

hbm2ddl.auto: Essa configuração é muito importante para que seja criada automaticamente as tabelas no banco de dados.
Existe varias opções para esse comando

Update: Ele criar as tabelas no banco de dados ou atualiza se ja existe.
Create-Drop: Ele criar as tabelas no banco de dados e deleta se existe alguma (Muito cuidado com esse);
Create: Apenas cria as tabelas.

Configuração de Debug

Existem varias configurações de Debug, no caso estou utilizando apenas duas

show_sql: Ele mostra no console da ide os comandos criados como exemplo insert into Pessoa (nome, idade) values ('Joao', 33)
format_sql: Imprime o comando SQL executado de forma para melhor entendimento.

existe outras como generate_statistics e use_sql_comments.


É isso galera, qual duvida posta nos comentários.

Criticas, Sugestões serão bem vindas ;)

Obrigado pela a visita, vou tentar postar o máximo.