Eu criaria uma classe AdministradoresDaEmpresas…e mapearia nela o administrador, empresa, e os demais campos.
Na classe Administradores, uma lista para esta Classe e na Empresas tb um lista para ela…
O que acha?
Eu segui sua idéia.
Mas não consegui fazer funcionar, com o mapeamento o hibernate não grava mas também não dá nenhuma mensagem de erro, se eu retirar o mapeamento com AdministradoresEmpresas ele salva normalmente.
Eu fiz o mapeamento só na classe Empresas, porque a lógica do meu sistema é que o Administrador tem que estar logado para depois poder cadastrar a Empresa, então eu não pretendo carregar uma lista de administradoresempresas na classe Administrador embora o relacionamento seja muitos para muitos (aceito opiniões caso não seja usual, ou esteja errado meu jeito de pensar)
Vou postar meus códigos:
Classe Empresa
package investweb.empresas;
import investweb.administradoresempresas.AdministradoresEmpresas;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.NaturalId;
@Entity
@Table(name="empresas")
public class Empresa implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -6950471521243119489L;
@Id
@GeneratedValue
private Integer idEmpresa;
@NaturalId
private String cnpj;
private String nomeFantasia;
private String razaoSocial;
private String inscricaoEstadual;
private String enderecoEmp;
private String enderecoNumeroEmp;
private String bairroEmp;
private String cidadeEmp;
private String cepEmp;
private String ufEmp;
private String telefoneContatoEmp;
private float aliquotaIR;
@OneToMany(cascade = CascadeType.ALL, mappedBy="empresa")
private List<AdministradoresEmpresas> redeAdministradores;
public Integer getIdEmpresa()
{
return idEmpresa;
}
public void setIdEmpresa(Integer idEmpresa)
{
this.idEmpresa = idEmpresa;
}
public String getCnpj()
{
return cnpj;
}
public void setCnpj(String cnpj)
{
this.cnpj = cnpj;
}
public String getNomeFantasia()
{
return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia)
{
this.nomeFantasia = nomeFantasia;
}
public String getRazaoSocial()
{
return razaoSocial;
}
public void setRazaoSocial(String razaoSocial)
{
this.razaoSocial = razaoSocial;
}
public String getInscricaoEstadual()
{
return inscricaoEstadual;
}
public void setInscricaoEstadual(String inscricaoEstadual)
{
this.inscricaoEstadual = inscricaoEstadual;
}
public String getEnderecoEmp()
{
return enderecoEmp;
}
public void setEnderecoEmp(String enderecoEmp)
{
this.enderecoEmp = enderecoEmp;
}
public String getEnderecoNumeroEmp()
{
return enderecoNumeroEmp;
}
public void setEnderecoNumeroEmp(String enderecoNumeroEmp)
{
this.enderecoNumeroEmp = enderecoNumeroEmp;
}
public String getBairroEmp()
{
return bairroEmp;
}
public void setBairroEmp(String bairroEmp)
{
this.bairroEmp = bairroEmp;
}
public String getCidadeEmp()
{
return cidadeEmp;
}
public void setCidadeEmp(String cidadeEmp)
{
this.cidadeEmp = cidadeEmp;
}
public String getCepEmp()
{
return cepEmp;
}
public void setCepEmp(String cepEmp)
{
this.cepEmp = cepEmp;
}
public String getUfEmp()
{
return ufEmp;
}
public void setUfEmp(String ufEmp)
{
this.ufEmp = ufEmp;
}
public String getTelefoneContatoEmp()
{
return telefoneContatoEmp;
}
public void setTelefoneContatoEmp(String telefoneContatoEmp)
{
this.telefoneContatoEmp = telefoneContatoEmp;
}
public float getAliquotaIR()
{
return aliquotaIR;
}
public void setAliquotaIR(float aliquotaIR)
{
this.aliquotaIR = aliquotaIR;
}
public List<AdministradoresEmpresas> getRedeAdministradores()
{
return redeAdministradores;
}
public void setRedeAdministradores(List<AdministradoresEmpresas> redeAdministradores)
{
this.redeAdministradores = redeAdministradores;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + Float.floatToIntBits(aliquotaIR);
result = prime * result
+ ((bairroEmp == null) ? 0 : bairroEmp.hashCode());
result = prime * result + ((cepEmp == null) ? 0 : cepEmp.hashCode());
result = prime * result
+ ((cidadeEmp == null) ? 0 : cidadeEmp.hashCode());
result = prime * result + ((cnpj == null) ? 0 : cnpj.hashCode());
result = prime * result
+ ((enderecoEmp == null) ? 0 : enderecoEmp.hashCode());
result = prime
* result
+ ((enderecoNumeroEmp == null) ? 0 : enderecoNumeroEmp
.hashCode());
result = prime * result
+ ((idEmpresa == null) ? 0 : idEmpresa.hashCode());
result = prime
* result
+ ((inscricaoEstadual == null) ? 0 : inscricaoEstadual
.hashCode());
result = prime * result
+ ((nomeFantasia == null) ? 0 : nomeFantasia.hashCode());
result = prime * result
+ ((razaoSocial == null) ? 0 : razaoSocial.hashCode());
result = prime
* result
+ ((redeAdministradores == null) ? 0 : redeAdministradores
.hashCode());
result = prime
* result
+ ((telefoneContatoEmp == null) ? 0 : telefoneContatoEmp
.hashCode());
result = prime * result + ((ufEmp == null) ? 0 : ufEmp.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Empresa other = (Empresa) obj;
if (Float.floatToIntBits(aliquotaIR) != Float
.floatToIntBits(other.aliquotaIR))
return false;
if (bairroEmp == null)
{
if (other.bairroEmp != null)
return false;
}
else if (!bairroEmp.equals(other.bairroEmp))
return false;
if (cepEmp == null)
{
if (other.cepEmp != null)
return false;
}
else if (!cepEmp.equals(other.cepEmp))
return false;
if (cidadeEmp == null)
{
if (other.cidadeEmp != null)
return false;
}
else if (!cidadeEmp.equals(other.cidadeEmp))
return false;
if (cnpj == null)
{
if (other.cnpj != null)
return false;
}
else if (!cnpj.equals(other.cnpj))
return false;
if (enderecoEmp == null)
{
if (other.enderecoEmp != null)
return false;
}
else if (!enderecoEmp.equals(other.enderecoEmp))
return false;
if (enderecoNumeroEmp == null)
{
if (other.enderecoNumeroEmp != null)
return false;
}
else if (!enderecoNumeroEmp.equals(other.enderecoNumeroEmp))
return false;
if (idEmpresa == null)
{
if (other.idEmpresa != null)
return false;
}
else if (!idEmpresa.equals(other.idEmpresa))
return false;
if (inscricaoEstadual == null)
{
if (other.inscricaoEstadual != null)
return false;
}
else if (!inscricaoEstadual.equals(other.inscricaoEstadual))
return false;
if (nomeFantasia == null)
{
if (other.nomeFantasia != null)
return false;
}
else if (!nomeFantasia.equals(other.nomeFantasia))
return false;
if (razaoSocial == null)
{
if (other.razaoSocial != null)
return false;
}
else if (!razaoSocial.equals(other.razaoSocial))
return false;
if (redeAdministradores == null)
{
if (other.redeAdministradores != null)
return false;
}
else if (!redeAdministradores.equals(other.redeAdministradores))
return false;
if (telefoneContatoEmp == null)
{
if (other.telefoneContatoEmp != null)
return false;
}
else if (!telefoneContatoEmp.equals(other.telefoneContatoEmp))
return false;
if (ufEmp == null)
{
if (other.ufEmp != null)
return false;
}
else if (!ufEmp.equals(other.ufEmp))
return false;
return true;
}
}
Classe AdministradoresEmpresas
package investweb.administradoresempresas;
import investweb.administradores.Administrador;
import investweb.empresas.Empresa;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="administradoresempresas")
public class AdministradoresEmpresas implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -891602918275900279L;
@Id
@GeneratedValue
private Integer idAdministradorEmpresa;
private boolean empresaPrincipal;
private boolean responsavelEmpresa;
@ManyToOne(optional=false)
@JoinColumn(name="idAdministrador",referencedColumnName="idAdministrador")
private Administrador administrador;
@ManyToOne(optional=false)
@JoinColumn(name="idEmpresa",referencedColumnName="idEmpresa")
private Empresa empresa;
public Integer getIdAdministradorEmpresa()
{
return idAdministradorEmpresa;
}
public void setIdAdministradorEmpresa(Integer idAdministradorEmpresa)
{
this.idAdministradorEmpresa = idAdministradorEmpresa;
}
public boolean isEmpresaPrincipal()
{
return empresaPrincipal;
}
public void setEmpresaPrincipal(boolean empresaPrincipal)
{
this.empresaPrincipal = empresaPrincipal;
}
public boolean isResponsavelEmpresa()
{
return responsavelEmpresa;
}
public void setResponsavelEmpresa(boolean responsavelEmpresa)
{
this.responsavelEmpresa = responsavelEmpresa;
}
public Administrador getAdministrador()
{
return administrador;
}
public void setAdministrador(Administrador administrador)
{
this.administrador = administrador;
}
public Empresa getEmpresa()
{
return empresa;
}
public void setEmpresa(Empresa empresa)
{
this.empresa = empresa;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result
+ ((administrador == null) ? 0 : administrador.hashCode());
result = prime * result + ((empresa == null) ? 0 : empresa.hashCode());
result = prime * result + (empresaPrincipal ? 1231 : 1237);
result = prime
* result
+ ((idAdministradorEmpresa == null) ? 0
: idAdministradorEmpresa.hashCode());
result = prime * result + (responsavelEmpresa ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AdministradoresEmpresas other = (AdministradoresEmpresas) obj;
if (administrador == null)
{
if (other.administrador != null)
return false;
}
else if (!administrador.equals(other.administrador))
return false;
if (empresa == null)
{
if (other.empresa != null)
return false;
}
else if (!empresa.equals(other.empresa))
return false;
if (empresaPrincipal != other.empresaPrincipal)
return false;
if (idAdministradorEmpresa == null)
{
if (other.idAdministradorEmpresa != null)
return false;
}
else if (!idAdministradorEmpresa.equals(other.idAdministradorEmpresa))
return false;
if (responsavelEmpresa != other.responsavelEmpresa)
return false;
return true;
}
}
Método salvar da Classe EmpresaDAOHibernate
@Override
public void salvar(Empresa empresa) throws Exception
{
// TODO Auto-generated method stub
try
{
this.session.beginTransaction();
this.session.saveOrUpdate(empresa);
this.session.getTransaction().commit();
}
catch (Exception e)
{
// TODO: handle exception
this.session.getTransaction().rollback();
throw new Exception();
}
}
Método salvar do ManagedBean da Empresa
public void salvar()
{
try
{
EmpresaRN empresaRN = new EmpresaRN();
ContextoBean contextoBean = ContextoUtil.getContextoBean();
this.setAdministrador(contextoBean.getAdministradorLogado());
AdministradoresEmpresas administradoresEmpresas = new AdministradoresEmpresas();
administradoresEmpresas.setAdministrador(administrador);
if(empresa.getIdEmpresa()==0)
{
administradoresEmpresas.setEmpresaPrincipal(true);
administradoresEmpresas.setResponsavelEmpresa(true);
}
this.empresa.getRedeAdministradores().add(administradoresEmpresas);
empresaRN.salvar(empresa);
}
catch (Exception e)
{
// TODO: handle exception
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Atenção",e.getMessage());
context.addMessage(null,mensagem);
}
}
Lembrando que se eu tirar o mapeamento funciona.
Desculpem se a pergunta for muito boba, é o primeiro projeto MEU mesmo que desenvolvo usando hibernate, eu não criei o DAO completo para a classe AdministradoresEmpresas, eu imagino que ao salvar a Empresa irá salvar os dados da outra tabela também. É isso mesmo?
O que fiz de errado?? :?:
Já tomei uma surra dessa parte, agradeço toda a ajuda possível.
Obrigado