TDSI – Mapeamento objeto relacional (MOR) com Hibernate parte 2

No artigo anterior aprendemos a configurar o arquivo persistence.xml do Hibernate e neste post vamos configurar os POJOS  (Plain Old Java Objects (Os Singelos Clássicos Objetos Java)) .

O Hibernate e/ ou Eclipse-Link persiste classes java clássicos, nem tão clássicos pois ele faz uso de annotations. O mapeamento pode ser definido através de xml ou de maneira mais prática com anotações Java. Quando utilizamos anotações evitamos criação de extensos arquivos em xml. As anotações (annotations) estão estão no pacote javax.persistence.

@Entity é a principal anotaçõa JPA ela deve aparecer antes do nome de uma classe e deve ser definida em todas as classes que terão objetos persistidos no banco de dados e são mapeadas para tabelas, por convenção as tabelas possuem os mesmos nomes das classes.  Se o nome da classe não corresponde ao da tabela no banco utiliza-se a anotação @Table. Colunas declaradas na classe são mapeadas para colunas na tabela no banco de dados e pode-se alterar esse padrão utilizando a anotação @Column.

@Id indica qual o atributo é chave primária.

No nosso exemplo vamos persistir dados que possuem o relacionamento MUITOS-PARA-UM.

foi criado no banco de dados TDSI do post anterior as seguintes tabelas com uma estrutura muito simples.

 
CREATE TABLE DEPTO 
(
 ID INTEGER PRIMARY KEY,
 NOME VARCHAR(100) NOT NULL
);

CREATE TABLE FUNCIONARIO 
(
  ID INTEGER PRIMARY KEY,
  NOME VARCHAR(100) NOT NULL,
  ID_DEPTO INTEGER NOT NULL,
  FOREIGN KEY (ID_DEPTO) REFERENCES DEPTO
); 

Agora vamos criar um pacote chamado modelo e dentro desse pacote vamos criar uma classe chamada Depto dentro de  modelo.Depto.java contendo:

package modelo;
import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table (name="depto")
public class Depto implements Serializable {
    @Id 
    @Column(name="id")  
    private Long id;
    
    private String nome;
     
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}

Depois criar a classe Funcionario que esta dentro modelo.Funcionario.java contendo:

package modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table (name="funcionario")
public class Funcionario implements Serializable {
    @Id 
    @Column(name="id")  
    private Long id;
    private String nome;
    
    @ManyToOne
    @JoinColumn(name="id_depto")
    private Depto depto;
    
    @Column(name="nascimento")
    @Temporal(TemporalType.DATE)
    private Date nasc;
    
    @Column(name="salario",precision=10,scale=2)
    private Double salario;
   
    .....
    /* geters e seters devem ser incluídos e nesse caso é padrão 
       se não não funcionará */
}

Os métodos geters e seters foram omitidos em Funcionário por causa do tamanho do post mas devem ser incluídos  (implementados) para o sistema funcionar.

Duas anotações novas foram implementadas:

@Temporal(Temporal.DATE)  essa anotação informa que a coluna envolvida é do tipo DATE.
@Column(name=”salario”,precision=10,scale=2) essa anotação informa que a coluna esta definida no banco de dados como por exemplo SALARIO NUMERIC(10,2).

@ManyToOne @JoinColumn(name=”id_depto”) essa anotação é muito importante no contexto do projeto, ela informa que Muitos funcionários  (instâncias) apontam para no máximo uma instância de Depto ou seja Muitos para UM e que a chave estrangeira que faz a junção com Depto é a coluna id_depto e logo abaixo esta a declaração dela: private Depto depto.

Manipulando as Entidades

Para manipular as entidades devemos utilizar um EntityManager que é obtido através de uma EntityMangerFactory (padrão de projeto Fábrica) usando o nome da unidade de persistencia que foi criada no artigo anterior.

     EntityManagerFactory factory = 
        Persistence.createEntityManagerFactory("JavaHibernatePU");
     EntityManager manager = factory.createEntityManager();

 

continua…

 

Esse post foi publicado em TDSI - Tópicos em Desenvolvimento de Sistemas de Informação I e III. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s