Erro ao inserir registro

Boa noite,

Ao tentar “salvar” um objeto do tipo Aluno, o erro a seguir é exibido:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.renaissance.entities.Contato
	org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:249)

Fiz algumas tentativas mas sem êxito: salvei primeiro as relacionadas e depois o objeto principal mas não deu certo

save(aluno.endereco);
save(aluno.contato);
save(aluno);

Abaixo estão as classes relacionadas:

public class Aluno implements java.io.Serializable {

	@OneToOne
    @JoinColumn(name="id_escola")
    private Escola escola = new Escola();

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="id_creator")
    @Column(name="id_aluno")
    private Long id;

    @Column(name="nome")
    private String nome;

    @OneToOne
    @JoinColumn(name="id_endereco")
    private Endereco endereco = new Endereco();

    @OneToOne
    @JoinColumn(name="id_contato")
    private Contato contato = new Contato();

}

public class Endereco implements java.io.Serializable {

	@Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="id_creator")
    @Column(name="id_endereco")
    private Long id;

    @Column(name="logradouro")
    private String logradouro;

    @Column(name="numero")
    private String numero;

    @Column(name="complemento")
    private String complemento;
}

public class Contato implements java.io.Serializable {


	@Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="id_creator")
    @Column(name="id_contato")
    private Long id;

    @Column(name="email")
    private String email;

    @Column(name="telefone")
    private String telefone;

    @Column(name="celular")
    private String celular;
}

Desde já agradeço.

Dentro do objeto aluno, vc tem Escola, Endereco e Contato.

Vc esta fazendo chamadas implicitas para Endereco e Contrato

save(aluno.endereco); save(aluno.contato); save(aluno);
E o objeto escola vc não esta salvando em momento nenhum.
Ele nem está com cascade e nem está nas chamadas implícitas.

Seria bom postar o código completo onde tenta salvar.

Mas o problema pode ser na entidade Escola mesmo que não está sendo salva. Talvez você tenha instanciado ela.

O objeto empresa não será persistido, mas eu o instanciei sim.


	public void save(Aluno a) throws DAOException {
		try {
			HibernateHelper.getManagedSession().save(a);//retorna o Session
		} catch (Exception e) {
			throw new DAOException(e);
		}
	}

Empresa? Você quis dizer Escola né?

Este é o problema. Se você não vai salvar a entidade Escola ela deve estar nula, se instanciar deve salvá-la ou ocorrerá o a TransientObjectException.

Alguma entidade com relacionamento pode estar null, antes de salvar é preciso dar um new ex: if (aluno == null){ aluno = new Aluno()}

Coloque um break point nos save’s e verifique o objeto Aluno e seus relacionamentos.

Abraço

Se puderem analisar o novo post(mais detalhado) eu agradeço. Infelizmente não consegui resolver ainda.

http://www.guj.com.br/java/291118-object-references-an-unsaved-transient-instance-erro-ao-salvar#1541328