Home » Desenvolvimento » Hibernate e Banco de Dados.
formats

Hibernate e Banco de Dados.

Com o uso de ferramentas que automatizam a forma ao qual os dados são gravados no banco de dados, o processo de modelar o banco de dados ( o famoso esquema lógico/físico, modelo relacional) acabou ficando obsoleto, o que torna prejudicial para o desenvolvimento de um projeto.

Banco de Dados

Banco de Dados

Uma destas ferramentas é o Hibernate, que auxilia o desenvolvedor JAVA a não se preocupar com esta etapa de modelagem fazendo com que ele ganhe tempo para exercer outras atividades, mas para garantir este benefício é necessário utilizar a ferramenta da maneira correta para que ela não torne assim um vilão no decorrer do seu projeto. Em O.O existe a necessidade de dividir as reponsabilidades, não deixando uma classe sobrecarregada para gerenciar todos os recursos de uma aplicação.

[notice]Vale apena ter uma tabela com várias colunas do que um modelo com várias tabelas especializadas[/notice]

Em uma modelagem relacional vale apena ter uma tabela com várias colunas do que um modelo com várias tabelas especializadas, pois minimiza a quantidade de joins para obter um resultado. Exemplo:

@Entity
public class Servico {
  @Id
  @GeneratedValue
  private Int id;
  private String nome;
  private Double preco;
  private Date inicioPromocao;
  private Date fimPromocao;
  // getters e setters
}
@Entity
public class Promocao {
 private Date inicio;
 private Date fim;
 // getters e setters
}

Se quiser saber se uma promoção é aplicável a um serviço e por quantos dias podemos aproveitar uma promoção. Colocar esse código dentro de um controlador não parece uma boa idéia. Seria necessário colocar esta situação em outro lugar. Criando assim a classe Intervalo:

public class Intervalo {
  private Date inicio;
  private Date fim;
}

O Servico e a Promocao invés de guardar informações com vários Dates, passa a guardar informação de um Intervalo:

@Entity
public class Servico {
  @Id
  @GeneratedValue
  private Int id;
  private String nome;
  private Double preco;
  private Intervalo periodoPromocao;
  // getters e setters
}
@Entity
public class Promocao {
  private Intervalo promocao;
  // getters e setters
}

A criação da classe Intervalo traz vários benefícios, assim como unir dados e comportamentos:

public class Intervalo {
  private Date inicio;
  private Date fim;
  public int getDias() {...}
  public Intervalo juncaoCom(Intervalo i) {...}
}
[warning]Criar uma tabela e referenciar seus registros através de chaves estrangeiras nas tabelas Servico e Promocao só trará a necessidade de joins.[/warning]

Mapeando a classe Intervalo. Criar uma tabela e referenciar seus registros através de chaves estrangeiras nas tabelas Servico e Promocao só trará a necessidade de joins. Criando uma classe Embeddableseus atributos serão colunas na tabela da entidade que tem o atributo anotado com @Embedded.

@Embeddable
public class Intervalo {
  //...
}
@Entity
public class Promocao {
  @Embedded
  private Intervalo promocao;
  // a tabela Promocao terá uma coluna inicio e outra fim
  // ...
}

É importante conhecer os demais recursos do Hibernate que nos garante em não precisar adequar nossas entidades às nossas tabelas, nem de adequar nossas tabelas às nossas entidades. Há ainda o suporte a herança, nomenclatura das tabelas,  chaves compostas, colunas, além de tipos definidos pelo usuário para diferentes banco de dados.

 

Fonte: Caelum.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2010 - 2012 Herbert Lima. Todos os direitos reservados.
credit