Problema Hibernate
Pessoal estou com a seguinte duvida tenho duas classes relacionadas de um para um (oneToOne) só que quando insiro uma a outra não é inserida e gera um exception.
Abaixo segue as classe
Classe Usuario que tem relacão com usuarioDadoscomplementares
package br.com.dukatitec.entidades;
import br.com.dukatitec.entidades.definicoes.Sexo;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Embedded
private DataHoraCriacao dataHoraCriacao;
@Column(nullable = false, length = 50)
private String nome;
@Column(nullable = false, length = 70)
private String sobreNome;
@Column(nullable = false, length = 120, updatable = false)
private String email;
@Column(nullable = false, columnDefinition = "Text")
private String senha;
@Enumerated
@Column(nullable = false)
private Sexo sexo;
@OneToOne
@Cascade(value = {CascadeType.ALL})
@JoinColumn(name = "id_usuariodadoscomplementares")
private UsuarioDadosComplementares usuarioDadosComplementares;
@OneToMany
private List<UsuarioSite> usuarioSites;
public Usuario() {
}
public Usuario(String nome, String sobreNome, String email, String senha, Sexo sexo, UsuarioDadosComplementares usuarioDadosComplementares, List<UsuarioSite> usuarioSites) {
this.dataHoraCriacao = new DataHoraCriacao();
this.nome = nome;
this.sobreNome = sobreNome;
this.email = email;
this.senha = senha;
this.sexo = sexo;
this.usuarioDadosComplementares = usuarioDadosComplementares;
this.usuarioSites = usuarioSites;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public DataHoraCriacao getDataHoraCriacao() {
return dataHoraCriacao;
}
public void setDataHoraCriacao(DataHoraCriacao dataHoraCriacao) {
this.dataHoraCriacao = dataHoraCriacao;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobreNome() {
return sobreNome;
}
public void setSobreNome(String sobreNome) {
this.sobreNome = sobreNome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Sexo getSexo() {
return sexo;
}
public void setSexo(Sexo sexo) {
this.sexo = sexo;
}
public UsuarioDadosComplementares getUsuarioDadosComplementares() {
return usuarioDadosComplementares;
}
public void setUsuarioDadosComplementares(UsuarioDadosComplementares usuarioDadosComplementares) {
this.usuarioDadosComplementares = usuarioDadosComplementares;
}
public List<UsuarioSite> getUsuarioSites() {
return usuarioSites;
}
public void setUsuarioSites(List<UsuarioSite> usuarioSites) {
this.usuarioSites = usuarioSites;
}
}
Classe UsuarioDadosComplementares
package br.com.dukatitec.entidades;
import br.com.dukatitec.entidades.definicoes.AreaProfissional;
import br.com.dukatitec.entidades.definicoes.Escolaridade;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
@Entity
@Table(name = "usuariodadoscomplementares")
public class UsuarioDadosComplementares implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Embedded
private DataHoraCriacao dataHoraCriacao;
@Temporal(value = javax.persistence.TemporalType.DATE)
private Date dataNascimento;
@Enumerated
private Escolaridade escolaridade;
@Enumerated
private AreaProfissional areaProfissional;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Date dataNascimento) {
this.dataNascimento = dataNascimento;
}
public Escolaridade getEscolaridade() {
return escolaridade;
}
public void setEscolaridade(Escolaridade escolaridade) {
this.escolaridade = escolaridade;
}
public AreaProfissional getAreaProfissional() {
return areaProfissional;
}
public void setAreaProfissional(AreaProfissional areaProfissional) {
this.areaProfissional = areaProfissional;
}
public DataHoraCriacao getDataHoraCriacao() {
return dataHoraCriacao;
}
public void setDataHoraCriacao(DataHoraCriacao dataHoraCriacao) {
this.dataHoraCriacao = dataHoraCriacao;
}
}[/code]
COMO ESTOU INSERINDO
[code]public class teste {
public static void main(String args[]) throws Exception {
Usuario a = new Usuario("André", "Justi", "justi.andre@gmail.com", "andreandresenha", Sexo.MASCULINO, null, null);
UsuarioDadosComplementares usuarioDadosComplementares = new UsuarioDadosComplementares();
usuarioDadosComplementares.setAreaProfissional(AreaProfissional.DESENVOLVIMENTO_PROGRAMAÇÃO);
usuarioDadosComplementares.setEscolaridade(Escolaridade.SEGUNDO_GRAU_COMPLETO);
usuarioDadosComplementares.setDataNascimento(new Date());
a.setUsuarioDadosComplementares(usuarioDadosComplementares);
usuarioDAO usuarioDao = new usuarioDAO();
usuarioDao.insert(a);
}
}
OBS: quando insiro o usuario sem passar o usuarioDadosComplementares, funciona e a coluna usuarioDadosComplementares fica nulla, porem quando eu insiro passando o usuarioDadosComplementares como mostrei acima, gera a exception:
Exception in thread "main" java.lang.Exception: javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.dukatitec.entidades.UsuarioDadosComplementares.dataHoraCriacao
at ImplementsGenericInsert.insert(ImplementsGenericInsert.java:18)
at ImplementsGenericDao.insert(ImplementsGenericDao.java:60)
at teste.main(teste.java:31)
Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.dukatitec.entidades.UsuarioDadosComplementares.dataHoraCriacao
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226)
at ImplementsGenericInsert.insert(ImplementsGenericInsert.java:12)
... 2 more
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.dukatitec.entidades.UsuarioDadosComplementares.dataHoraCriacao
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:609)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:601)
at org.hibernate.engine.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:30)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
... 3 more
Java Result: 1