Oracle sử dụng EclipseLink:EclipseLink: Vấn đề với thác xóa làm cập nhật thay vì
Tôi có một đến nhiều mối quan hệ giữa cha mẹ (workflow) và trẻ em (giai đoạn). Trong cơ sở dữ liệu tôi có một ràng buộc xóa như vậy mà xóa trên giai đoạn xóa công việc. Điều này hoạt động tốt từ 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;
}
}
khi tôi tải các công việc theo tên bên trong một @Transactional (tuyên truyền = Propagation.REQUIRED) phương pháp và sau đó em.remove (workflow) đối tượng đó,
tôi nhận được ngoại lệ, chẳng hạn như
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
vì tôi đã xác định cột stages.workflow_id không thể rỗng.
Tại sao eclipselink cố gắng cập nhật bảng giai đoạn bằng id luồng công việc không phải là thay vì chỉ xóa chính hàng giai đoạn?
Làm cách nào để khắc phục điều đó?
@ManyToOne không có một thuộc tính mappedBy – MeBigFatGuy