Bom dia pessoal.
Primeiramente feliz natal a todos 
Estou com um problema ao persistir uma tabela pai com uma tabela filha.
Estou utilizando JPA com provider Hibernate 4.3 Final.
Tenho uma Entity chamada Pessoa(pai) e outra PessoaMail(filha).
Consigo persistir normalmente a Pessoa mas quando persisto a filha, esta me dando erro.
Pessoa
[code]@Entity
@Table(name = “PESSOA”, schema = Configuracao.SCHEMA)
public class Pessoa extends GenericLoggerEntity implements Serializable {
private static final long serialVersionUID = -8391088907076552464L;
@Id
@Column(name = "CPESSOA", precision = 10)
@SequenceGenerator(name="Pessoa_ID_Seq", sequenceName="S_ID_Pessoa", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="Pessoa_ID_Seq")
private Integer cPessoa;
@TamanhoMinMax(minimo = 3, maximo = 20)
@Column(name = "FANTASIA", length = 20)
private String fantasia;
@Column(name = "RAZAO", length = 50)
private String razao;
@Column(name = "CNPJ", length = 14, unique = true)
private String cnpj;
@Column(name = "TELEFONE", length = 30)
private String telefone;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "cPessoa", cascade = CascadeType.PERSIST)
private List<PessoaMail> emails;
[/code]
PessoaMail
[code]@Entity
@Table(name=“PESSOAMAIL”, schema = Configuracao.SCHEMA)
@IdClass(PessoaMailPK.class)
public class PessoaMail extends GenericLoggerEntity implements Serializable {
private static final long serialVersionUID = 4377978914861200882L;
@Id
@ManyToOne(fetch = FetchType.EAGER, targetEntity = Pessoa.class)
@JoinColumn(name = "CPESSOA")
private Pessoa cPessoa;
@Id
@ManyToOne(fetch = FetchType.EAGER, targetEntity = TipoMail.class)
@JoinColumn(name = "CTIPOMAIL")
private TipoMail cTipoMail;
@Column(name = "EMAIL", nullable = false)
private String email;
[/code]
PessoaMailPK
[code]public class PessoaMailPK implements Serializable {
private static final long serialVersionUID = 7028436891640853454L;
private Integer cPessoa;
private Integer cTipoMail;
[/code]
TipoMail
[code]@Entity
@Table(name=“TIPOMAIL”, schema = Configuracao.SCHEMA)
public class TipoMail implements Serializable {
private static final long serialVersionUID = -6825850658538609140L;
@Id
@Column(name = "CTIPOMAIL")
private Integer cTipoMail;
@Column(name ="DTIPOMAIL", length = 50)
private String dTipoMail;
[/code]
Controller
[code]List emails = new ArrayList();
emails.add(pessoaMail);
emails.add(pessoaMailNFe);
pessoa.setEmails(emails);
pessoaFacade.salvar(pessoa);
[/code]
Quando eu persisto, o hibernate gera o insert da pessoa, que está correto:
2013-12-25T11:58:03.263-0200|Informações: Hibernate:
/* insert Pessoa
*/ insert
into
PESSOA
(LOGIN_ALTERACAO, LOGIN_CRIACAO, ULTIMA_ALTERACAO, CNPJ, FANTASIA, RAZAO, CPESSOA)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Mas depois ele faz este insert:
2013-12-25T11:58:03.269-0200|Informações: Hibernate:
/* insert TipoMail
*/ insert
into
TIPOMAIL
(DTIPOMAIL, CTIPOMAIL)
values
(?, ?)
Este insert da erro de chave primaria.
Não quero que ele faça este insert, não sei porque ele fez, o correto seria fazer o insert na PessoaMail e não em TipoMail.
Alguém já passou por isso e pode me ajudar?