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