Pessoal alguém sabe como resolver esse problema, tenho um banco legado com uma tabela funcionario onde sua primary key é composta por Empresa e Pessoa, criei as classes Empresa, Pessoa e Funcionario. Gerando as tabelas pelo hibernate a estrutura fica igual ao banco legado, só que quando tento gravar um registro em funcionário gera a seguinte exception
//
@SuppressWarnings("serial")
@Embeddable
public class FuncionarioId implements Serializable{
@ManyToOne
@JoinColumn(name="empresa", updatable=false, insertable=false)
@ForeignKey(name="funcionario_empresa_fk")
private Empresa empresa;
@ManyToOne
@ForeignKey(name="funcionario_fk")
@JoinColumns({
@JoinColumn(name = "empresa", updatable=false, insertable=false),
@JoinColumn(name = "funcionario", updatable=false, insertable=false)
})
private Pessoa pessoa;
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
//Classe Funcionario
@SuppressWarnings("serial")
@Entity
public class Funcionario implements Serializable{
@EmbeddedId
private FuncionarioId funcionarioId;
@Column(length = 1)
private String situacao;
private Double comissao;
public Double getComissao() {
return comissao;
}
public void setComissao(Double comissao) {
this.comissao = comissao;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
public FuncionarioId getFuncionarioId() {
return funcionarioId;
}
public void setFuncionarioId(FuncionarioId funcionarioId) {
this.funcionarioId = funcionarioId;
}
}
}
@SuppressWarnings("serial")
@Entity
public class Empresa implements Serializable{
@Id @GeneratedValue
private Integer empresa;
@Column(length = 50, nullable=false)
private String nomeFantasia;
@Column(length = 50, nullable=false)
private String razaoSocial;
//set e get
}
@SuppressWarnings("serial")
@Embeddable
public class PessoaId implements Serializable{
@ManyToOne
@JoinColumn(name="empresa")
@ForeignKey(name="pessoa_empresa_fk")
private Empresa empresa;
private Integer pessoa;
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((empresa == null) ? 0 : empresa.hashCode());
result = PRIME * result + ((pessoa == null) ? 0 : pessoa.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;
final PessoaId other = (PessoaId) obj;
if (empresa == null) {
if (other.empresa != null)
return false;
} else if (!empresa.equals(other.empresa))
return false;
if (pessoa == null) {
if (other.pessoa != null)
return false;
} else if (!pessoa.equals(other.pessoa))
return false;
return true;
}
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public Integer getPessoa() {
return pessoa;
}
public void setPessoa(Integer pessoa) {
this.pessoa = pessoa;
}
}
@SuppressWarnings("serial")
@Entity
public class Pessoa implements Serializable {
@EmbeddedId
private PessoaId pessoa;
@Column(length=50, nullable=false)
private String nomeFantasia;
@Column(length=50)
private String razaoSocial;
//get e set
}