Oracle utilizzando EclipseLink:EclipseLink: Problemi con eliminazione a catena facendo aggiornamento invece
Ho un uno a molti relazione tra un padre (workflow) e bambini (stadio). Nel database ho un vincolo di cancellazione tale che cancella la fase di eliminazione del flusso di lavoro. Questo funziona bene da sqlplus.
class Workflow {
@Override
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "workflow", targetEntity = Stage.class)
@JoinColumn(name = "WORKFLOW_ID")
public Set<Stage> getStages() {
return m_stages;
}
}
class Stage {
@Override
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false, targetEntity = Workflow.class)
@JoinColumn(name = "WORKFLOW_ID", nullable = false)
public Workflow getWorkflow() {
return m_workflow;
}
}
quando carico il workflow nome all'interno di un @Transactional (propagazione = Propagation.REQUIRED) metodo e quindi em.remove (workflow) tale oggetto,
ottengo eccezioni, come
Error Code: 1407
Call: UPDATE STAGES SET WORKFLOW_ID = ?, FAILURE_STAGE_ID = ?, SUCCESS_STAGE_ID = ? WHERE (STAGE_ID = ?)
bind => [4 parameters bound]
Caused by: java.sql.SQLException: ORA-01407: cannot update ("DB"."STAGES"."WORKFLOW_ID") to NULL
perché ho definito la colonna stages.workflow_id in modo che non sia annullabile.
Perché eclipselink sta tentando di aggiornare la tabella degli stage con ID del flusso di lavoro null, anziché eliminare semplicemente la riga dello stage?
Come posso risolvere il problema?
@ManyToOne non ha un attributo mappedBy – MeBigFatGuy