TDSI – Mapeamento objeto relacional (MOR) com JPA – ManyToMany com atributos

ManyToMany (muitos para muitos) com atributos.

Exemplo Unidirecional.

Um funcionário pode trabalhar em vários departamentos e um Departamento pode ter vários funcionários.

Classe Depto

package model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Depto implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 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;
 }
}

Classe Funcionario

package model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Funcionario implements Serializable {
 @Id
 @Column(name="id")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 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;
 }

}

A classe DeptoFuncionario além de fazer a união das duas vai guardar mais duas colunas: O salario e se se ativo (true) ou inativo (false) esse funcionário naquele depto, ou seja, para cada departamento diferente vai ter uma remuneração diferente e se esta ativo ou não.

Classe DeptoFuncionario


package model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class DeptoFuncionario implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

 @Column(columnDefinition = "NUMERIC(8,2) NOT NULL")
 private Double salario;

 private Boolean ativo;

 @ManyToOne
 private Depto depto;

 @ManyToOne
 private Funcionario funcionario;

 public Depto getDepto() {
 return depto;
 }

 public void setDepto(Depto depto) {
 this.depto = depto;
 }

 public Funcionario getFuncionario() {
 return funcionario;
 }

 public void setFuncionario(Funcionario funcionario) {
 this.funcionario = funcionario;
 }

 public Double getSalario() {
 return salario;
 }

 public void setSalario(Double salario) {
 this.salario = salario;
 }

 public Long getId() {
 return id;
 }

 public void setId(Long id) {
 this.id = id;
 }
 public Boolean getAtivo() {
 return ativo;
 }

 public void setAtivo(Boolean ativo) {
 this.ativo = ativo;
 }

}

Persistindo os dados:

 EntityManagerFactory factory =
   Persistence.createEntityManagerFactory("Unidade_Persistencia");

 EntityManager manager = factory.createEntityManager();

 Depto depto = new Depto();
 Funcionario funcionario = new Funcionario();
 DeptoFuncionario deptofuncionario = new DeptoFuncionario();

 depto.setNome("SETOR DE T.I.");

 funcionario.setNome("FULANO BELTRANO FANDANGO");

 deptofuncionario.setFuncionario(funcionario);
 deptofuncionario.setDepto(depto);
 deptofuncionario.setAtivo(true);
 deptofuncionario.setSalario(11500.55D);

 manager.getTransaction().begin();
 manager.persist(depto);
 manager.persist(funcionario);
 manager.persist(deptofuncionario);
 manager.getTransaction().commit();

 depto = new Depto();
 deptofuncionario = new DeptoFuncionario();

 depto.setNome("SETOR DE ADMINISTRAÇÃO");

 deptofuncionario.setFuncionario(funcionario);
 deptofuncionario.setDepto(depto);
 deptofuncionario.setAtivo(false); // nesse ele esta inativo
 deptofuncionario.setSalario(22300.00D); // salario era maior

 manager.getTransaction().begin();
  manager.persist(depto); // gravando novo setor
  manager.persist(deptofuncionario);
 manager.getTransaction().commit();

 

 

Esse post foi publicado em TDSI - Tópicos em Desenvolvimento de Sistemas de Informação I e III e marcado , . Guardar 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