Erro ao salvar objeto tansiente

1 resposta
fbeli

Senhores,

Tenho 2 classes relacionadas OneToOne, Cliente e Login:
@Entity
@Table(name = "CLIENTE", uniqueConstraints = @UniqueConstraint(columnNames = { "CPF" }))
public class Cliente implements Serializable {

    @Id
    @Column(name = "ID_CLIENTE", nullable = false, updatable = false, columnDefinition = "int")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToOne(mappedBy = "cliente")
    private Login login;

...
}
@Entity
@Table(name = "LOGIN")
public class Login implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID_LOGIN", nullable = false, updatable = false, columnDefinition = "int")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToOne    
    @JoinColumn(name = "ID_CLIENTE", nullable = false)
    @ForeignKey(name = "FK_LOGIN_CLIENTE")
    @Index(name = "IDX_LOGIN_CLIENTE", columnNames = "ID_CLIENTE")
    private Cliente cliente;

...

}
Já fiz algumas alterações no relacionamento entre elas e adiciono dentre outras maneiras assim:
Cliente cl = new Cliente();
		
	cl.setCPF(ws.getCpf());
	
	Login login = new Login();
	login.setSenha(ws.getSenha());

	cl.setLogin(login);

Já usei tb:

login.setCliente(cl);

, adiciono o Login ao cliente, mas ao salvar tenho recebido a exception:

11:37:16,434 WARN [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected 11:37:16,434 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@1e1a1bd java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.m4u.multioperadora.commons.domain.Cliente.login -> com.m4u.multioperadora.commons.domain.Login at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:611) at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:513) at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:101) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:269)

...
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.m4u.multioperadora.commons.domain.Cliente.login -> com.m4u.multioperadora.commons.domain.Login
at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:376)
at org.hibernate.engine.Cascade.cascade(Cascade.java:162)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
... 53 more

1 Resposta

fbeli

faltou o

cascade = CascadeType.MERGE
Criado 23 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 1
Participantes 1