Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中从集合中删除实体_Java_Database_Hibernate - Fatal编程技术网

Java 在hibernate中从集合中删除实体

Java 在hibernate中从集合中删除实体,java,database,hibernate,Java,Database,Hibernate,我试图手动删除实体集合中的每个实体。问题是,这些实体不会从数据库中删除,即使它们已从任务的集合中删除 下面是我用来实现这一目标的代码: public int removeExistingCosts(final DataStoreTask task) { int removedAccumulator = 0; Query query = entityManager.createNamedQuery(DataStoreCost.GET_COSTS_FOR_TASK); qu

我试图手动删除实体集合中的每个实体。问题是,这些实体不会从数据库中删除,即使它们已从任务的集合中删除

下面是我用来实现这一目标的代码:

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;
}
有什么想法吗

p.S该集合表示为:

@OneToMany(targetEntity = DataStoreCost.class, mappedBy = "task", cascade = CascadeType.ALL)
private Collection<DataStoreCost> costs;
@OneToMany(targetEntity=DataStoreCost.class,mappedBy=“task”,cascade=CascadeType.ALL)
私人征收费用;

干杯。

它没有删除实体,因为它不知道是否有其他东西在引用它


您需要启用删除孤立项。在jpa2中,使用属性。如果您使用的是hibernate注释,请使用CascadeStyle delete Orphant。

我认为您需要通过
entityManager
显式删除
成本
实体。从
任务
成本列表中删除
成本
时,实际上只删除对该实例的引用。它不知道特定的
成本
将不会在其他任何地方使用。

是,请致电
entityManager.remove(成本)在for循环中。