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;
...
}
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