Mapear duas Entidades para a mesma coluna no banco
Bom dia.
Pessoal, preciso fazer a camada ORM para a seguinte modelagem.
No banco de dados, foi modelado uma tabela pessoa com N contatos e Endereços.
essa tabela pessoa está categorizada, então terei diferentes tipos de pessoas, como por exemplo, Cliente, Fornecedor, Funcionário e Transportador.
No java então modelo diferentes entidade, Cliente, Fornecedor, etc, pois cada tipo de pessoa, possuem regras de negocio especificas.
Bom agora que descrevi o ambiente, preciso saber como faço para mapear essas classe, para a mesma coluna na table de contato.
Abaixo segue os codigos
Entidade de Cliente
Entidade de Fornecedor
e a classe contato
Mas ao fazer isso, o hibernate me gera a seguinte Exception
Repeated column in mapping for entity: classe.projeto.contato.Contato column: pessoaID (should be mapped with insert=false update=false)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:676)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:698)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:720)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:474)
at org.hibernate.mapping.RootClass.validate(RootClass.java:235)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
at classe.projeto.utils.Conexao.buildSessionFactory(Conexao.java:16)
Como faço o mapeamento dessas entidades
Pessoal, preciso fazer a camada ORM para a seguinte modelagem.
No banco de dados, foi modelado uma tabela pessoa com N contatos e Endereços.
essa tabela pessoa está categorizada, então terei diferentes tipos de pessoas, como por exemplo, Cliente, Fornecedor, Funcionário e Transportador.
No java então modelo diferentes entidade, Cliente, Fornecedor, etc, pois cada tipo de pessoa, possuem regras de negocio especificas.
Bom agora que descrevi o ambiente, preciso saber como faço para mapear essas classe, para a mesma coluna na table de contato.
Abaixo segue os codigos
Entidade de Cliente
@Entity
@Table(name = pessoa)
public class Cliente implements Serializable {
private static final long serialVersionUID = -893996185060004864L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer pessoaID;
@Column(nullable=false, length = 5)
private String tipoPessoa;
@Column(nullable=false, length = 100)
private String nome;
@Column(length = 100)
private String razaoSocial;
@Column(nullable=false, unique=true)
private String cnpf;
private String rgInscEstadual;
@Column(nullable=false)
private Boolean status;
private String obs;
}
Entidade de Fornecedor
@Entity
@Table(name = pessoa)
public class Fornecedor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer pessoaID;
@Column(nullable=false, length = 5)
private String tipoPessoa;
@Column(nullable=false, length = 100)
private String nome;
@Column(nullable=false, length = 100)
private String razaoSocial;
@Column(nullable=false, length = 14)
private String cnpf;
@Column(length = 20)
private String rgInscEstadual;
@Column(nullable=false)
private Boolean status;
}
e a classe contato
@Entity
@Table(name = pessoa)
public class Fornecedor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer pessoaID;
@Column(nullable=false, length = 5)
private String tipoPessoa;
@Column(nullable=false, length = 100)
private String nome;
@Column(nullable=false, length = 100)
private String razaoSocial;
@Column(nullable=false, length = 14)
private String cnpf;
@Column(length = 20)
private String rgInscEstadual;
@Column(nullable=false)
private Boolean status;
}
@Entity
@Table(name = contato)
public class Contato implements Serializable{
private static final long serialVersionUID = 1116058132248806046L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer contatoID;
@ManyToOne
@JoinColumn(name = pessoaID)
private Cliente cliente;
@ManyToOne
@JoinColumn(name = pessoaID)
private Fornecedor fornecedor;
@ManyToOne
@JoinColumn(name=filialID)
private Filial filial;
@ManyToOne
@JoinColumn(name=unidadeID)
private Unidade unidade;
@Column(length = 100)
private String nome;
@Column(length = 100)
private String email;
@Column(length = 20)
private String telefone;
@Column(length = 20)
private String celular;
@Column(length = 100)
private String voip;
}
Mas ao fazer isso, o hibernate me gera a seguinte Exception
Repeated column in mapping for entity: classe.projeto.contato.Contato column: pessoaID (should be mapped with insert=false update=false)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:676)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:698)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:720)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:474)
at org.hibernate.mapping.RootClass.validate(RootClass.java:235)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
at classe.projeto.utils.Conexao.buildSessionFactory(Conexao.java:16)
Como faço o mapeamento dessas entidades
Daniel Everling
Curtidas 0
Respostas
Robson Teixeira
03/12/2011
pesquise sobre as estrategias de persistencia com objetos na mesma arvore de herança exemplo
exemplos
public class Cliente extends Pessoa implements Serializable,
public class Fornecedor extends Pessoa ....
Assim
você vai persistir seus Objetos Firnecedor,Cliente e Contato mantendo elas com a mesma superclasse
pesquise sobre as estrategias de persistencia com as classes do modelo em herando da mesma superclasse que também faz parte do modelo.
espero que tenha ajudado
att
robson
exemplos
public class Cliente extends Pessoa implements Serializable,
public class Fornecedor extends Pessoa ....
Assim
você vai persistir seus Objetos Firnecedor,Cliente e Contato mantendo elas com a mesma superclasse
pesquise sobre as estrategias de persistencia com as classes do modelo em herando da mesma superclasse que também faz parte do modelo.
espero que tenha ajudado
att
robson
GOSTEI 0
Daniel Everling
03/12/2011
Bah, ROBSON PASSARELLA TEIXEIRA.
Você salvou meu final de semana, sua sugestão funcionou.
Muito obrigado
Você salvou meu final de semana, sua sugestão funcionou.
Muito obrigado
GOSTEI 0
Davi Costa
03/12/2011
Show de bola Daniel.
assim que possível favor fechar o chamado.
att Davi
assim que possível favor fechar o chamado.
att Davi
GOSTEI 0
Dyego Carmo
03/12/2011
Opa !
Resolvido ?
Poderia fechar o chamado ?
Valeu !
Resolvido ?
Poderia fechar o chamado ?
Valeu !
GOSTEI 0