/* * * Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute - Graduate School and Research in Engineering. * See the file license.txt for copyright permission. * */ /** * package relativo as classes de negocio * Com as classes bean * */ package modelo; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.SequenceGenerator; import javax.persistence.Table; /** * Classe relativa ao Bean para o cadastro de Familias de modelos * * @author daysemou * */ // A NamedQuerie tem que ter exatamente o nome do m�todo que a emprega @NamedQueries( { @NamedQuery ( name = "Familia.recuperaUmaFamiliaEModelos", query = "select f from Familia f " + "left outer join fetch f.modelos where f.id = ? " + "group by f.codFamilia " ), @NamedQuery ( name = "Familia.recuperaUmaFamiliaPeloCodigo", query = "select f from Familia f where f.codFamilia = ?" ), @NamedQuery(name = "Familia.recuperaListaDeFamiliasPeloCodigoLike", query = "select distinct(f) from Familia f " + "left outer join fetch f.modelos " + "where f.codFamilia like '%' || upper(?) || '%' " ), @NamedQuery(name = "Familia.recuperaListaDeFamiliasPorDescricao", query = "select distinct(f) from Familia f " + "left outer join fetch f.modelos " + "where upper(f.descrFamilia) like '%' || upper(?) || '%' " + "order by f.codFamilia " ), @NamedQuery ( name = "Familia.recuperaListaDeFamilias", query = "select f from Familia f order by f.codFamilia" ), @NamedQuery ( name = "Familia.recuperaListaDeFamiliasComModelos", query = "select distinct f from Familia f " + "left outer join fetch f.modelos " + "order by f.codFamilia" ), @NamedQuery ( name = "Familia.recuperaListaDeFamiliasComDeFamPers", query = "select distinct f from Familia f " + "left outer join fetch f.deFamPers " + "order by f.codFamilia" ), @NamedQuery ( name = "Familia.recuperaListaPaginadaDeFamilias", query = "select distinct f from Familia f left outer join fetch f.modelos order by f.codFamilia" ), @NamedQuery ( name = "Familia.recuperaListaPaginadaDeFamiliasCount", query = "select count (distinct f) from Familia f" ) }) @Entity @Table(name="FAMILIA") @SequenceGenerator(name="SEQUENCIA", sequenceName="SEQ_FAMILIA", allocationSize=1) public class Familia implements Serializable { private static final long serialVersionUID = 1L; /** identificador da familia de modelos */ private Long id; /** codigo da familia de modelos */ private String codFamilia; /** descricao da familia de modelos */ private String descrFamilia; /** cobertura percentual de estoques da familia de modelos */ private double cobertura; /** estoque inicial (em pe�as) para a familia de modelos */ private double estqInicFam; /** Tempo m�dio unitario de costura da Familia */ private double tmuc; // Uma familia possui modelos // Devemos usar a interface Set para modelos ao inv�s de HashSet, pois no JPA �s vezes vai // usar uma classe que implementa Set. Mas, � espec�fica do JPA (PersistenceSet) private List<DeFamPer> deFamPers; private List<Modelo> modelos = new ArrayList<Modelo>(); /* A interface Set representa uma cole��o SEM elementos * duplicados. Para que um elemento seja armazenado em um Set � * utilizado o m�todo HashCode() que ir� retornar um n�mero * inteiro que ser� convertido na posi��o do elemento dentro do * Set. Um Set n�o garante a ordem de itera��o dos elementos * contidos no Set; em particular, n�o garante que a ordem ir� * permanecer constante ao longo do tempo. Um Set permite a * exist�ncia delementos null. */ public Familia() { } // ********* M�todos do Tipo Get e Set ********* @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQUENCIA") @Column(name="ID") public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(nullable = false, length=15, unique=true) public String getCodFamilia() { return codFamilia; } public void setCodFamilia(String codFamilia) { this.codFamilia = codFamilia; } @Column(length=200) public String getDescrFamilia() { return descrFamilia; } public void setDescrFamilia(String descrFamilia) { this.descrFamilia = descrFamilia; } @Column(length=8) public double getCobertura() { return cobertura; } public void setCobertura(double cobertura) { this.cobertura = cobertura; } @Column(length=11) public double getEstqInicFam() { return estqInicFam; } public void setEstqInicFam(double estqInicFam) { this.estqInicFam = estqInicFam; } @Column(length=7) public void setTmuc(double tmuc) { this.tmuc = tmuc; } public double getTmuc() { return tmuc; } public void setCoberturaStr(String coberturaStr) { try { this.cobertura = Double.parseDouble(coberturaStr); } catch(NumberFormatException e) { this.cobertura=-999999999;}; } // ********* M�todos para Associa��es ********* @OneToMany(mappedBy = "familia") @OrderBy public List<Modelo> getModelos() { return modelos; } public void setModelos(List<Modelo> modelos) { this.modelos = modelos; } // O atributo 'mappedBy' do JPA faz referencia ao atributo "familia" da classe DeFamPer // e por default, esta lista � inicializada como LAZY. @OneToMany(mappedBy="familia", fetch=FetchType.LAZY, cascade=CascadeType.REMOVE) public List<DeFamPer> getDeFamPers() { return deFamPers; } public void setDeFamPers(List<DeFamPer> deFamPers) { this.deFamPers = deFamPers; } @Override public String toString(){ return this.codFamilia + " - " + this.descrFamilia; } /** * * Este m�todo pode ser gerado AUTOMATICAMENTE pelo Java , juntamente com o m�todo * "equals(Object obj)". Estes metodos s�o necess�rios para se determinar um crit�rio principal * de igualdade entre 2 objetos. * * @return boolean */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((codFamilia == null) ? 0 : codFamilia.hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } /** * * Este m�todo pode ser gerado AUTOMATICAMENTE pelo Java , juntamente com o m�todo * "hashCode()". Estes metodos s�o necess�rios para se determinar um crit�rio principal * de igualdade entre 2 objetos. * * @param Object * @return boolean */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof Familia)) { return false; } Familia other = (Familia) obj; if (codFamilia == null) { if (other.codFamilia != null) { return false; } } else if (!codFamilia.equals(other.codFamilia)) { return false; } if (id == null) { if (other.id != null) { return false; } } else if (!id.equals(other.id)) { return false; } return true; } }