Guia Essencial de Configuração e Mapeamento Hibernate
Classificado em Computação
Escrito em em português com um tamanho de 7,77 KB
Configurações Essenciais do Hibernate
hibernate.connection.driver_class
: Classe JDBC relativa ao gerenciador de banco de dados utilizado.hibernate.connection.url
: String de conexão com o banco de dados.hibernate.dialect
: Dialeto que informa qual SGBD será utilizado.hibernate.hbm2ddl.auto
: Forma de manipulação da estrutura do banco de dados.create
create-drop
update
mapping resource
: Arquivos de mapeamento ORM.
Configuração e Manipulação de Sessões
SessionFactory
,Configuration
: Configuração via programa.Session
,Transaction
: Manipulação de dados.
Mapeamento de Relacionamentos Um para Um (1:1)
- Exemplo: Endereço e Pessoa: Endereço e pessoa são distintos, mas no DER (Diagrama de Entidade-Relacionamento) cada um chama a classe do outro.
constrained=true
: Não permite que se crie um endereço sem uma pessoa associada.cascade="save-update"
: Quando uma pessoa for inserida ou atualizada, o endereço também será.
Identificadores (Primary Keys - PK)
id
: Representa a chave de acesso (Primary Key - PK).generator class
: Indica como será gerada essa PK.- Estratégias de Geração de PK:
Foreign
: Usa o identificador de outro objeto associado. Geralmente utilizado com uma associação de chave primária.Identity
: Oferece suporte a colunas de identificação em DB2, MySQL, MS SQL Server, Sybase e HypersonicSQL. O identificador retornado é do tipolong
,short
ouint
.Increment
: Gera identificadores do tipolong
,short
ouint
que são exclusivos somente quando nenhum outro processo está inserindo dados na mesma tabela. Não use em um cluster.Param
: Usado em conjunto comforeign
para buscar a PK em outra tabela/classe.
Operações de Gravação com Relacionamentos
Fazer a Referência Cruzada entre os Objetos:
endereco.setPessoa(pessoa)
pessoa.setEndereco(endereco)
Fazer a Gravação:
sessao.saveOrUpdate(pessoa)
ousessao.save(pessoa)
- Você deve gravar somente a pessoa, pois o Hibernate irá desencadear a gravação do endereço.
- Não efetue a gravação direta do endereço caso o mesmo não esteja com o objeto pessoa informado nele.
Mapeamento de Relacionamentos Um para Muitos (1:N)
Será preciso especificar um atributo do tipo de coleção.
No Hibernate, é possível utilizar as seguintes coleções:
Set
(HashSet
)Map
(HashMap
)
Exemplos de Configuração:
<many-to-one name="curso">
: (Nota: Não há 'curso' no diagrama, mas o campo existe na classe.)column="cursoID"
: Nome do campo na tabela referente.<one-to-many inverse>
: Define como o Hibernate tratará a inserção e retirada de objetos. Apenas quando um objeto for inserido do outro lado, ele deve ser persistido no banco de dados.private Set disciplinas = new HashSet();
: Indica que um curso pode possuir diversas disciplinas.
Gravando Dados com Coleções
- Instanciar os objetos pessoa e endereço.
- Atribuir dados para cada um deles.
- Fazer a referência cruzada entre os dois objetos.
Considerações sobre Coleções
Set
: Não armazena objetos duplicados (garante unicidade).Map
: Se a chave do objeto já existe, ele retorna um erro.
Estrutura de Classes para Mapeamento
- Classe Disciplina: Em toda classe, você deve definir os atributos e criar todos os getters e setters, caso contrário, o Hibernate apresentará erros.
- Classe Curso: Exemplo:
private Set disciplinas = new HashSet();
- Relacionamento: Para a ligação entre as duas classes existir, a variável
Curso
do tipoCurso
deve ter uma relaçãomany-to-one
. column
: Nome do campo na tabela referente a essa propriedade.
O que é o Hibernate?
É um framework, um conjunto de JARs que, quando combinados, oferecem uma especialidade específica (persistência de dados).
Configuração via hibernate.cfg.xml
- É o arquivo de configuração principal do Hibernate. Tudo é configurado via XML.
- Ele possui o caminho para o banco de dados.
- Primeiro, é preciso ter o conector JDBC instalado (ex: Driver JDBC MySQL, Java Driver Database Connect).
Detalhamento de hibernate.hbm2ddl.auto
create-drop
: Ele estará sempre limpando e criando o esquema do banco de dados.- Ideal quando em fase de planejamento.
Classe Utilitária de Conexão (Hibernate Utility)
- Você precisará de uma classe utilitária.
- Será uma fábrica de sessões.
- Para criar uma sessão, você deve invocá-la.
Configuração Programática
- Exemplo:
Configuration = new Configuration().configure()
. - Ele carrega um arquivo XML externo para dentro do programa.
- Ou, no arquivo
hibernate.config
, ele já pode pegar de lá se configurarmos. - Ele cria seu banco de dados de acordo com a classe.
- Comentário: É possível remover a configuração do XML e deixá-la toda programaticamente dentro do seu projeto.
- Exemplo de propriedade:
hibernate.connection.username
:root
. - Pegando o nome da propriedade e o seu conteúdo.
Criando e Gerenciando a Sessão
- Criando a Nossa Sessão: Exemplo:
buildSessionFactory()
. - Ele está se comunicando com o banco, criando a estrutura e preparando-a.
- Conectando ao Banco: Exemplo:
sessao = HibernateUtil.getSessionFactory().openSession()
. - Ele fará a conexão com o banco de dados.
- A sessão é atribuída à variável
sessao
. - A variável
transaction
: A partir da sessão, ele inicia a transação. - Ciclo de Transação:
beginTransaction()
- No meio, ocorre a manipulação dos dados.
commit()
rollback()
- Depois, o
commit()
e o fechamento da sessão.
Mapeamento de Endereço (Arquivo XML)
- É o arquivo XML de mapeamento.
- Exemplo de estrutura:
<!DOCTYPE>
,<hibernate-mapping>
(nunca muda). - A partir do
class name
, você começa a modificá-lo.
Gravando os Dados (Ambiente de Desenvolvimento)
- Direto no NetBeans, na pasta...
- ...e adicionar a biblioteca.