Classe entidade - criação automática NetBeans

3 respostas
viniciusfaleiro

Galera… pedi pro netbeans gerar uma classe de entidade pra mim à partir de uma tabela com chave composta… pra eu usar com Hibernate…enfim… ele gerou duas…uma dela está como PK… não entendi a lógica disso…

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Entities;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Vinicius
 */
@Entity
@Table(name = "funcionario")
@NamedQueries({@NamedQuery(name = "Funcionario.findAll", query = "SELECT f FROM Funcionario f"), @NamedQuery(name = "Funcionario.findByRg", query = "SELECT f FROM Funcionario f WHERE f.funcionarioPK.rg = :rg"), @NamedQuery(name = "Funcionario.findByEmpresaId", query = "SELECT f FROM Funcionario f WHERE f.funcionarioPK.empresaId = :empresaId")})
public class Funcionario implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected FuncionarioPK funcionarioPK;
    @Basic(optional = false)
    @Lob
    @Column(name = "CRACHA")
    private String cracha;
    @Lob
    @Column(name = "NOME")
    private String nome;
    @Lob
    @Column(name = "CENTRO_CUSTO")
    private String centroCusto;
    @JoinColumn(name = "EMPRESA_ID", referencedColumnName = "ID", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Empresa empresa;

    public Funcionario() {
    }

    public Funcionario(FuncionarioPK funcionarioPK) {
        this.funcionarioPK = funcionarioPK;
    }

    public Funcionario(FuncionarioPK funcionarioPK, String cracha) {
        this.funcionarioPK = funcionarioPK;
        this.cracha = cracha;
    }

    public Funcionario(int rg, int empresaId) {
        this.funcionarioPK = new FuncionarioPK(rg, empresaId);
    }

    public FuncionarioPK getFuncionarioPK() {
        return funcionarioPK;
    }

    public void setFuncionarioPK(FuncionarioPK funcionarioPK) {
        this.funcionarioPK = funcionarioPK;
    }

    public String getCracha() {
        return cracha;
    }

    public void setCracha(String cracha) {
        this.cracha = cracha;
    }

    public String getNome() {
        return nome;
    }

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

    public String getCentroCusto() {
        return centroCusto;
    }

    public void setCentroCusto(String centroCusto) {
        this.centroCusto = centroCusto;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (funcionarioPK != null ? funcionarioPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Funcionario)) {
            return false;
        }
        Funcionario other = (Funcionario) object;
        if ((this.funcionarioPK == null && other.funcionarioPK != null) || (this.funcionarioPK != null && !this.funcionarioPK.equals(other.funcionarioPK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entities.Funcionario[funcionarioPK=" + funcionarioPK + "]";
    }

}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Entities;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embeddable;

/**
 *
 * @author Vinicius
 */
@Embeddable
public class FuncionarioPK implements Serializable {
    @Basic(optional = false)
    @Column(name = "RG")
    private int rg;
    @Basic(optional = false)
    @Column(name = "EMPRESA_ID")
    private int empresaId;

    public FuncionarioPK() {
    }

    public FuncionarioPK(int rg, int empresaId) {
        this.rg = rg;
        this.empresaId = empresaId;
    }

    public int getRg() {
        return rg;
    }

    public void setRg(int rg) {
        this.rg = rg;
    }

    public int getEmpresaId() {
        return empresaId;
    }

    public void setEmpresaId(int empresaId) {
        this.empresaId = empresaId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (int) rg;
        hash += (int) empresaId;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof FuncionarioPK)) {
            return false;
        }
        FuncionarioPK other = (FuncionarioPK) object;
        if (this.rg != other.rg) {
            return false;
        }
        if (this.empresaId != other.empresaId) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entities.FuncionarioPK[rg=" + rg + ", empresaId=" + empresaId + "]";
    }

}

3 Respostas

C

Bom dia

Então vinicius, quando a tabela possui mais de uma chave primaria (primary key) a forma que o hibernate trata isso em objetos é criando uma classe auxiliar onde esta classe conterá todas as chaves primarias, e na sua classe (entidade) ele faz um referencia para a sua classe de chaves.

Falou.

viniciusfaleiro

Entendi… a classe que vai persistir é aquela sem a PK mesmo… más ela vai precisar de uma referência…=)…vlw garoto

C

Isso mesmo, eu também me deparei com essa caracteristica do hibernate com relação a multiplas PK a pouco tempo, mas se você analisar até faz sentido um pouco.

Falou.

Criado 10 de dezembro de 2009
Ultima resposta 10 de dez. de 2009
Respostas 3
Participantes 2