Oracle с использованием EclipseLink:
У меня отношения один-ко-многим между родителем (рабочий процесс) и детьми (этап). В базе данных у меня есть ограничение удаления, которое удаляет на этапе удаления рабочего процесса. Это прекрасно работает с 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;
}
}
когда я загружаю рабочий процесс по имени внутри метода @Transactional (распространение = Propagation.REQUIRED), а затем em.remove (рабочий процесс) этого объекта,
Я получаю исключения, такие как
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
потому что я определил столбец stage.workflow_id, чтобы он не обнулялся.
Почему eclipselink пытается обновить таблицу этапов с нулевыми идентификаторами рабочего процесса, а не просто удалить саму строку этапа?
Как мне это исправить?