1

OneToMany双方向の関係エンティティ クラス (WorkOrderおよび)がありTaskます。WorkOrderを 1 つ以上持っていますTaskクエリWorkOrderでエンティティを削除すると、外部キー制約例外が発生します。関連を自動的に削除することはできません。EntityManagerTask

私の質問: Is CascadeType.REMOVEused by em.removed(..)method? query?(削除クエリ)で使用されていませんか?

WorkOrder.java

.....
public class WorkOrder {
    ....
    @Temporal(TemporalType.TIMESTAMP)
    private Date expiryDate;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="workOrder", orphanRemoval=true)
    private List<Task> taskList;
    ......
}

タスク.java

......
public class Task {
    .....
    @ManyToOne
    @JoinColumn(name = "WORK_ORDER_ID", referencedColumnName = "ID")
    private WorkOrder workOrder;
    .....
}

WorkOrder有効期限に基づいて削除する必要があります。まず関連を削除する必要がありTask、その後で削除する必要がありWorkOrderます。それが正しいか?CascadeTypeで使えたらもっといいと思いますQuery

4

1 に答える 1

8

仕様によると、クエリによる DELETE (「DELETE FROM ...」で始まるクエリ) は、そのようなコールバックをトリガーしません (データストアからデータをすばやく削除する方法であるため)。コールバックは、通常の永続化操作 (persist、merge、refresh、remove) でのみ使用されるため、それらの動作に従う必要がある場合は、remove()を使用します。

于 2012-12-03T10:46:29.937 に答える