Exception Hibernate, DUVIDA!

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

Desculpe pessoal, já resolvi…
Obrigado

[quote=andrejusti]Desculpe pessoal, já resolvi…
Obrigado[/quote]

Parabéns.

Estou tendo o mesmo problema, por favor se puder colocar a resolução do problema.

Olá pessoal resolvi utilizando na anotação cascade = CascadeType.ALL.
Ocorreu esse erro também quando eu não inicializava os objetos de uma determinada classe.
Comecei a iniciar os objets que faziam relação com a classe que mostrava erro no próprio construtor.

Um pedaço do exemplo do nosso amigo dono do tópico

[code] @OneToOne
@Cascade(value = {CascadeType.ALL})
private UsuarioDadosComplementares usuarioDadosComplementares;
@OneToMany
private List usuarioSites;

 public Usuario() {  
      this.setUsuarioDadosComplementares(new UsuarioDadosComplementares);
 }  

[/code]

se o andrejusti tiver outra solução esperamos que poste para ficar de exemplo para o pessoal.

Obrigado