Mapear duas Entidades para a mesma coluna no banco

Boa Noite Pessoal.

Estou com um problema, que não sei como resolver esse mapeamento;
No meu banco de dados tenho uma tabela pessoa, onde salvo meus varios tipos de pessoas, como por exemplo, cliente, fornecedor, funcionario e transportadora.
No java tenho uma classe para cada tipo de pessoa, logo terei a classe Cliente, Fornecedor, etc.
Minhas pessooas podem ter varios contatos e endereços, minha dúvida é como mapeas essas classe de Cliente e Fornecedor para a Classe Contato
Abaixo segue como estou fazendo

@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;

        //get - set

}
  
         

ao fazer isso o seguinte erro eh retornado

Caused by: org.hibernate.MappingException: 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 para mapear essas entidades ??
Att

Tente mapear como ele disse no erro: should be mapped with insert=“false” update=“false”

Olá jakefrog, eu já tentei fazer o que sugere, mas isso faz com o aquela propriedade não seja inserida no banco de dados
O que precisaria, é que hora o objeto cliente será inserido, hora o objeto fornecedor seja inserido.

Voce deve colocar o insertable e uptable = a false, e como voce disse naum sera inserido no banco mesmo, pois voce tera que criar o indentificador para esta coluna o id, porque o objeto cliente é filho da classe cliente e eu acho que a sua intenção naum é persistir um objeto do tipo cliente ou fornecedor em uma coluna da tabela do seu banco de dados, naum é mesmo.

CristianPalmaSola10, como comentei no primeiro post, no banco tenho a tabela de pessoa, e uma pessoa podem ter N contatos e endereço.
Na aplicação quando meu usuário cadastrar um cliente, preciso salvar seus dados nas tabelas de contato e endereço, e quando o usuário cadastrar um fornecedor, quero salvar isso na mesma tabela de contato e endereço.

Será que existe uma maneira de mapear isso ?

Cara voc fez um canhao para matar uma mosquinha por que nuam cria uma entidade generica para cliente, fornecedor e tals no banco de dados e uma unica classe de entidade no seu programa depois se uma pessoa pode ter muitos contados entaum logicamente o contato tem q conhecer o seu dono (chave estrangeira de pessoa em contado) e a pessoa tem que ter uma lista de contantos que sao os seus contato, um list

Cara, preciso seguir a modelagem do banco que me foi entregue, e teve varias pessoas pensando tal modelagem. Então devo montar a camada ORM para a modelagem que foi feita.

Abaixo segue o que tenho até agora mapeado.

Entidade Cliente, referenciando table pessoa.


@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 fornecedor, referenciando table pessoa


@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 = "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;
}

Entendeu o que preciso ?

na clase contato cliente e fornecedor dever ser insertable e uptable false e vc dever ter o id de cada um ou seja mais dois atibutos para a mesma coluna pois eu acho que vai ser so o q vai ser persisitido a chave primaria do cliente ou fornecedor na tabela contato

Cristian, muito obrigado pela ajuda.
Mas pesquisei uma solução melhor para resolver o problema, utilizando herança.

logo terei isso

public class Cliente extends Pessoa implements Serializable,
public class Fornecedor extends Pessoa …

Algo muito logico que não tinha me dado conta.

Att