Anderson Silva

Tecnologia da informação pra quem gosta de TI

JPA + Hibernate: Criando massa de dados ao iniciar o sistema — 14/07/2014

JPA + Hibernate: Criando massa de dados ao iniciar o sistema

Boa tarde a todos,

Em alguns momentos durante o desenvolvimento de sistemas, precisamos ter o total controle dos dados inseridos em nosso sistema para que possamos por exemplo realizar teste.
Neste post irei demonstrar um recurso disponível a partir da versão 2.1 do JPA que permite que o sistema ao ser iniciado, limpe todas as tabelas do banco e execute um script sql.
O grande segredo está na execução deste script, pois a partir dele teremos o controle dos dados persistidos na base.

Primeiro passo: A linha no arquivo persistence.xml que indica ao Hibernate que deve limpar a base de dados ao iniciar o sistema é:
<property name=”hibernate.hbm2ddl.auto” value=”create”/>

Segundo passo: A linha no arquivo persistence.xml que indica o script que deverá ser executado após a criação do banco e iniciação do sistema é :
<property name=”hibernate.hbm2ddl.import_files” value=”/META-INF/sql/carregar-dados.sql” />

Obs.: O valor “/META-INF/sql/carregar-dados.sql” representa o caminho onde o script está presente.

Considerações importantes:
1. A pasta META-INF é a que fica dentro da estrutura da App.
Exemplo se for no padrão maven: /src/main/webapp/META-INF/..

2. O arquivo SQL somente será executado se o schema informado em [hibernate.hbm2ddl.auto ] for [create or create-drop]

Exemplo de script:
insert into pessoa(codigo, nome) values(1, “Anderson Silva);

Boa implementação a todos.

JPA+Hibernate: Mapeando Muitos para Muitos – manyToMany — 31/01/2014

JPA+Hibernate: Mapeando Muitos para Muitos – manyToMany

Pequenos e úteis trechos de código.

O código abaixo implementa um relacionamento muitos para muitos, o que no banco de dados será convertido em mais uma tabela para expressar este relacionamento.

No caso abaixo é um relacionamento entre professor e turma, onde um professor pode estar em várias turmas e uma turma pode ter vários professores.

O código abaixo deve ser implementados na classe de turma.

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name=”turma_professor”,
joinColumns = @JoinColumn(name=”turma_id”),
inverseJoinColumns = @JoinColumn(name=”professor_id”))
private Collection<Professor> professor;

O código abaixo deverá ser implementado na classe de professor

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=”turma_professor”,
joinColumns = @JoinColumn(name=”professor_id”),
inverseJoinColumns = @JoinColumn(name=”turma_id”))
private Collection<Turma> turmas;

O resultado desta implementação no banco de dados será uma tabela chamada turma_professor com dois campos: professor_id e turma_id.

JPA+Hibernate: Mapeamento Um para Muitos – OneToMany —

JPA+Hibernate: Mapeamento Um para Muitos – OneToMany

Pequenos e úteis trechos de código

Este mapeamento representa uma associação entre as classes de turma e matricula de forma que uma turma possa ter várias matrículas associadas.

O código abaixo deverá estar na tabela de turma:

@OneToMany(mappedBy=”turma”)    /* o nome turma precisa ser o nome do atributo

na classe matrícula que representa o objeto turma*/
Collection<Matricula> matriculas;         /* Acesso a uma collection de matrículas para pesquisa*/

O código abaixo deverá estar na tabela de matrícula:

@ManyToOne
@JoinColumn(name=”turma_id”)       /* turma_id será o nome do campo no banco de dados que irá

representar a chave estrangeira na tabela de matrícula que fará

a união com a tabela de turma */
private Turma turma;

JPA+Hibernate: Anotação para campo data —
JPA+Hibernate: Mapeamento de Chave primária simples utilizando SEQUENCE —

JPA+Hibernate: Mapeamento de Chave primária simples utilizando SEQUENCE

Pequenos e úteis trechos de código.

No trecho abaixo você está criando uma sequence que vai iniciar com 1 e incrementar em 1 a cada novo registro para ser utilizada como chave primária simples ou não composta.

@Id
@SequenceGenerator(name=”nome_da_sequencia”,initialValue=1,
allocationSize=1,sequenceName=”nome_da_sequencia”)
@GeneratedValue(strategy=GenerationType.AUTO,generator=”nome_da_sequencia”)
private Long id;

JPA+Hibernate: Mapeamento entre Classe e tabela —
JPA+Hibernate: Implementando singleton para classe de conexão ao banco de dados —

JPA+Hibernate: Implementando singleton para classe de conexão ao banco de dados

Este post descreve uma classe para conexão a uma base de dados utilizando JPA.

Padrão de projeto: Singleton

Eis o código completo da classe:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class EntityManagerSingleton {

private static EntityManager em;

private EntityManagerSingleton(){

}

public static EntityManager getInstance(){
if(em == null){
EntityManagerFactory emf = Persistence.createEntityManagerFactory(“ConexaoDB”);
em = emf.createEntityManager();
}
return em;
}

}

Boa implementação a todos.