2

エンティティのコレクションにあるすべてのエンティティを手動で削除しようとしています。問題は、エンティティがタスクのコレクションから削除されても、エンティティがデータベースから削除されないことです。

以下は、これを達成するために使用するコードです。

public int removeExistingCosts(final DataStoreTask task) {

    int removedAccumulator = 0;
    Query query = entityManager.createNamedQuery(DataStoreCost.GET_COSTS_FOR_TASK);
    query.setParameter(DataStoreCost.TASK_VARIABLE_NAME, task);


    try {

        List costsForTask = query.getResultList();
        for(Object cost : costsForTask) {
            task.getCosts().remove(cost);
            removedAccumulator++;
        }

    } catch (NoResultException e) {
        logger.debug("Couldn't costs for task: {}", task.getId());
    }

    entityManager.flush();
    entityManager.persist(task);

    return removedAccumulator;
}

何か案は?

PS コレクションは次のように表されます。

@OneToMany(targetEntity = DataStoreCost.class, mappedBy = "task", cascade = CascadeType.ALL)
private Collection<DataStoreCost> costs;

乾杯。

4

2 に答える 2

1

Costを介してエンティティを明示的に削除する必要があると思いますentityManagerCostコストリストからを削除すると、Tasks実際にはそのインスタンスへの参照のみが削除されます。その特定Costのものが他のどこでも使用されないことを知りません。

于 2012-11-30T13:35:20.403 に答える
1

他の何かがエンティティを参照しているかどうかがわからないため、エンティティを削除していません。

孤児の削除を有効にする必要があります。jpa2 では、orphanRemoval属性を使用します。休止状態の注釈を使用している場合は、CascadeStyle の孤立した削除を使用します。

于 2012-11-30T13:34:08.500 に答える