0

Hibernate Relacionamento N:1

logoHibernateHibernate Relacionamento N:1

Nesta segunda parte da postagem sobre relacionamentos com o Hibernate demonstro a criação de um relacionamento N:1, utilizando as anotações do Framework. Para exemplificar o relacionamento seguirei o modelo abaixo:

Class Diagram

A anotação @ManyToOne representará o relacionamento na classe Produto. Segue a implementação das classes persistentes:

Classe Persistente Categoria

Classe Persistente Produto

Na classe Produto criamos um objeto do tipo categoria que será responsável pelo mapeamento do relacionamento neste objeto fazemos as seguintes anotações: @ManyToOne(fetch= FetchType.EAGER) que representa em sim o relacionamento do tipo N para 1, já o atributo fetch com valor FetchType.EAGER significa que toda vez que o objeto pai for recuperado da base o atributo mapeado também será recuperado; @JoinColumn é usada para informar qual o nome da coluna que corresponde à chave estrangeira do mapeamento os atributos  insertable e updatable que se assumirem true indica que o atributo deve ser inserido  ou atualizado; @Fecth vai definir como o atributo mapeado será recuperado da base, no nosso caso é feito um SELECT para recuperar o atributo. E assim conseguimos mapear o relacionamento N para 1, nas próximas postagens mapearemos um relacionamento N para N e N para N com atributos.

0

Hibernate Relacionamento 1:N

logoHibernateHibernate Relacionamento 1:N

Nesta postagem descrevo uma forma de modelar um relacionamento entre tabelas 1 para muitos com o uso das anotações do Hibernate. Criei um exemplo simples para demonstrar o uso do Framework de uma forma clara e direta. Segue o modelo a ser implementado.

hibernate1-N

Para exemplificar o relacionamento criaremos as classes persistentes Departamento e Funcionário. A classe Departamento possuirá o relacionamento 1:N através de um atributos do tipo lista de funcionários e a partir de uma anotação @OneToMany.

A implementação da classe persistente Funcionario fica da seguinte forma:

A implementação da classe persistente Departamento fica da seguinte forma:

As classes Funcionario e Departamento serão mapeadas em nosso banco de dados com os nomes tbFuncionariotbDepartamento.

Nota-se que na classe Departamento foi feita a anotação @OneToMany que identifica o relacionamento 1:N, nesta anotação temos o atributo mappedBy com o valor ‘departamento’ onde este valor se refere a um atributo criado na classe Funcionario com o mesmo nome (ver classe Funcionario linha 37) este atributo serve em si para representar que na tabela tbFuncionario temos uma chave estrangeira  relacionada a tbDepartamento, o atributo fetch define quando o conteúdo o atributo será recuperado da base de dados.

A anotação @Cascade indica a ação em cascata a ser empregada do objeto pai para os objetos associados. Já na classe Funcionario foi criado um atributo do tipo departamento que recebe as anotações @ManyToOne que define que existem muitos funcionários para um departamento, @Cascade define as operações em cascata, @JoinColumn que define a chave estrangeira da tabela tbFuncionario, @Fetch  define como o atributo mapeado será recuperado da base de dados.

0

Como funciona o Hibernate

logoHibernateComo funciona o Hibernate

O Hibernate é um framework de mapeamento objeto relacional para aplicações Java, ou seja, é uma ferramenta para mapear classes Java em tabelas do banco de dados e vice-versa. É bastante poderoso e dá suporte ao mapeamento de associações entre objetos, herança, polimorfismo, composição e coleções.

O Hibernate não apresenta apenas a função de realizar o mapeamento objeto relacional. Também disponibiliza um poderoso mecanismo de consulta de dados, permitindo uma redução considerável no tempo de desenvolvimento da aplicação.

A Arquitetura do Hibernate

A arquitetura do Hibernate é formada por um conjunto de interfaces que são responsáveis por executar operações de criação, exclusão, consulta e atualização no banco de dados, além de uma interface para realizar configuração do Hibernate, interfaces responsáveis por realizar a interação entre os eventos do Hibernate e a aplicaçãoe interfaces que permitem a extensão das funcionalidades de mapeamento do Hibernate.

hibernatearquitetura

Além do mapeamento dos objetos relacionais e integração com os bancos de dados o Hibernate interage com APIs já existentes do Java: JTA, JNDI e JDBC.

As principais interfaces do Hibernate são: Session, SessionFactory, Transaction, Query, Configuration. Com essas interfaces conseguimos criar todas as nossas rotinas de banco de dados.

Interface Session

Possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe. Um objeto Session possui um cache local de objetos recuperados na sessão. Com ele é possível criar, remover, atualizar e recuperar objetos persistentes.

Interface SessionFactory

Responsável por manter o mapeamento objeto relacional em memória. Permite a criação de objetos Session, a partir dos quais os dados são acessados, também denominado como fábrica de objetos Sessions. Deve existir apenas uma instância dele na aplicação, pois é um objeto muito pesado para ser criado várias vezes.

Interface Configuration

É utilizada para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como por exemplo: o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.

Interface Transaction

É utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA.

Interfaces Criteria e Query

As interfaces Criteria e Query são utilizadas para realizar consultas ao banco de dados.

Em breve uma abordagem sobre relacionamentos entre tabelas utilizando o Hibernate. Espero ter ajudado em sua pesquisa ou estudo.

0

Persistência de Objetos com Hibernate (Parte 03)

logoHibernate

Persistência de Objetos com Hibernate (Parte 03)

Para testarmos as implementações realizadas na parte 1 e na parte 2 da postagem sobre Persistências de Objeto com Hibernate separei um main com as rotinas implementadas. Até aqui o projeto tem a seguinte estrutura:

 

prjHibernate

Para finalizar a primeira parte de postagens sobre o Hibernate e o seu poder em mapear e persistir objetos, em breve adicionarei mais temas relacionados ao hibernate, tais como relaciomentos, consultas com Criteria entre outros. Espero ter ajudado de alguma forma com essas postagens simples porém funcional. rsrs…

Testando o Projeto

Veja também as postagens anteriores:

0

Persistência de Objetos com Hibernate (Parte 02)

logoHibernatePersistência de Objetos com Hibernate (Parte 02)

Na postagem anterior vimos como mapear uma classe persistente e o como implementar o arquivo de configuração do Hibernate. Nesta postagem partiremos para a implementação do HibernateUtil que será a classe responsável por estabelecer uma sessão de conexão com a base de dados e criaremos a classe PesssoaDAO com as rotinas de banco referentes a classe de persistência PessoaVo.

Classe HibernateUtil

A classe HibernateUtil.java é disponibilizada com o Hibernate para ajudar o programador a criar os objetos Session responsáveis por fazer a persistência dos objetos. Segue a implementação da classe.

 Classes PessoaDAO e ContatoDAO

As classes PessoaDAO e ContatoDAO serão implementadas com as rotinas de banco. Seguem as mesma:

PessoaDAO.java

ContatoDAO.java

 Agora além das classes persistentes, do hibernate.cfg.xml, do HibernateUtil temos também definidos os DAOs do nosso projeto. Na próxima postagem colocarei um main para teste da estrutura criada.

0

Persistência de Objetos com Hibernate (Parte 01)

logoHibernatePersistência de Objetos com Hibernate (Parte 01)

Está é a primeira parte de uma série de postagens que farei sobre o Framework Hibernate, demonstrarei a facilidade de utilização deste framework para persistências de objetos em banco de dados relacionais.

Introdução ao Hibernate

O Hibernate é um framework que provê a persistências de objetos Java em um banco de dados relacional. Este framework oferece recursos que facilitam o mapeamento do modelo orientado objetos para modelo relacional fazendo uso de um processo chamado de MOR (Mapeamento Objeto Relacional). Mesmo trabalhando com a persistência de objetos estamos trabalhando um SGBD relacional.

Para iniciarmos neste framework um exemplo básico de agenda com duas Classes.

diagrama_exemplo

Configuração do Hibernate:

  • Configuração do Classpath

Utilizarei as seguintes bibliotecas:

      • antlr-2.7.7.jar
      • dom4j-1.6.1.jar
      • hibernate-commons-annotations-4.0.2.Final.jar
      • hibernate-core-4.2.7.SP1.jar
      • hibernate-jpa-2.0-api-1.0.1.Final.jar
      • javassist-3.18.1-GA.jar
      • jboss-logging-3.1.0.GA.jar
      • jboss-transaction-api_1.1_spec-1.0.1.Final.jar
      • mysql-connector-java-5.0.3-bin.jar

Caso não possua as mesmas clique aqui para baixar as dependências do Hibernate e clique aqui para baixar o drive do mysql. Não se esqueça de colocar os .jars em seu classpath.

  • Mapeamento dos Objetos

No Hiberante podemos usar duas técnicas para mapear objetos através do uso de XML ou através de Anotations que é a forma que utilizaremos. No mapeamento XML é  preciso acrescentar estes arquivos XML de mapeamento no arquivo hibernate.cfg.xml, para indicar a localização física de cada um deles.

      • Mapeando a Classe PessoaVo

      • Mapeando a Classe ContatoVo

 

Descrição das Anotations:

@Entity - Representa uma classe de persistência, toda classe que represente uma tabela no banco de dados deve ser anotada com essa anotação.

@Table - Anotação responsável por dizer qual tabela no banco de dados a classe irá representar.

@Id – Indica o atributo chave da tabela.

@GenedatedValue – Indica que o atributo chave é auto_incement no caso do mySQL e Sequence no caso do Postgres.

@OneToMany – Representa um relacionamento 1 para muitos.

Arquivo de Configuração hibernate.cfg.xml

O Arquivo de configuração hibernate.cfg.xml deverá está presente no diretório src do seu projeto, nele estão mantidas algumas configurações de conexão tais como: host, usuário, senha e até os objetos mapeados como classes persistentes.

Segue a Implementação do Arquivo:

Classes Persistentes

As classes persistentes representam os “Vo”s que serão persistidos na base de dados, no nosso caso seriam PessoaVo e ContatoVo. O Hibernate associará estas classes a uma tabela referente a mesma no banco.

Na segunda parte veremos a camada DAO e a configuração de Session do Hibernate. Até a próxima.