Many to One - Hibernate+JPA

Senhores,

Tenho uma classe “A” que possui um relacionamento 1-n com uma classe “B”, esta classe “B” é a superclasse de “B1” e B2", sendo que “B1” é superclasse da classe “C” que possui “C1” e “C2” como suas subclasses…

A classe “B” possui um objeto da classe “A” (ObjetoA), e a classe “C1” tem o seguinte código:
view plainprint?

    C1.setQqCoisaDeA(); //C1 herda todos os atributos e metodos de B por ser sua subclasse...  
    emf = Persistence.createEntityManagerFactory(nomeUnPersistencia);  
    em = emf.createEntityManager()  
    em.persist(C1);  
    commit();  
    em.close();  

C1.setQqCoisaDeA(); //C1 herda todos os atributos e metodos de B por ser sua subclasse… emf = Persistence.createEntityManagerFactory(nomeUnPersistencia); em = emf.createEntityManager() em.persist(C1); commit(); em.close();

O seguinte erro ocorre:

Exception in thread "AWT-EventQueue-0" javax.persistence.RollbackException: Error while commiting the transaction caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: C1.ObjetoA -> A 
         at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:353) at org.hibernate.engine.Cascade.cascade(Cascade.java:139) 
         at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) 
         at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122)  
         at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)  
         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)  
         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)  
         at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)  
         at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)  
         at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)  
         ... 27 more  
Exception in thread "AWT-EventQueue-0" javax.persistence.RollbackException: Error while commiting the transaction caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: C1.ObjetoA -> A at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:353) at org.hibernate.engine.Cascade.cascade(Cascade.java:139) at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122)         at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)         at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)         at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)         at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)         ... 27 more at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)

Alguém poderia ajudar?

Obrigado!

poste o seu mapeamento OneToMany

ele possui cascade ?

Não possuo nenhum mapeamento OneToMany em minha classe “A”. Apenas o ManyToOne em minha classe “B”.

Você teria algum exemplo com vc que fosse rápido postar para que eu possa dar uma olhada?

Obrigado!

Apenas para ilustrar melhor o que estou fazendo:

Classe “Pessoa” é a classe “B” que citei anteriormente:

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Pessoa implements java.io.Serializable {

    @Id @GeneratedValue
    @Column(name="PESSOA_ID", nullable= false)
    protected Long id;
    @ManyToOne (fetch=FetchType.EAGER)
    @JoinColumn(name="ENDERECO_ID", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    protected Endereco endereco;
    ...  

Classe “Endereco” é a classe “A”:

@Entity
@Table (name="Endereco")
public class Endereco implements java.io.Serializable {

    @Id
    @Column(name="ENDERECO_ID")
    private Long id;
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn(name="ENDERECO_ID")
    private Set<Pessoa> pessoas;
    ...

E o objeto contatoAgendaParticular seria minha classe C1:

//Inicio a trnasição
...
            Endereco end = new Endereco();
            end.setRua(endereco);
            end.setCep(CEP);
            end.setCidade(cidade);
            end.setEstado(estado);
            end.setPais(pais);
            contatoAgendaParticular.setEndereco(end);
...
//Persisto o objeto "contatoAgendaParticular"
//Dou o commit
//encerro a transição
...

Este seria o código… Alguma idéia :idea: ?

Obrigado!