Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 如何使用jpa删除持久化映射的元素_Hibernate_Jpa_Dictionary_Playframework - Fatal编程技术网

Hibernate 如何使用jpa删除持久化映射的元素

Hibernate 如何使用jpa删除持久化映射的元素,hibernate,jpa,dictionary,playframework,Hibernate,Jpa,Dictionary,Playframework,我正在尝试删除一个包含实体映射的实体,如下所示: @Entity public class TrxReport extends Model { @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "StatCategory") @MapKeyColumn(name = "TrxReport_key", nullable = false) @Cascade(value = { Cas

我正在尝试删除一个包含实体映射的实体,如下所示:

@Entity
public class TrxReport extends Model {
    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "StatCategory")
    @MapKeyColumn(name = "TrxReport_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<String, TrxStatCategory> categories;

    @Override
    public TrxReport delete(){
        for (AtmPosTrxStatCategory cat : categories.values()) {
            if (cat != null){
                categories.remove(cat.name);
                cat.delete();
            }
        }
        super.delete();
        return this;
    }
}
@实体
公共类TrxReport扩展模型{
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name=“StatCategory”)
@MapKeyColumn(name=“TrxReport\u key”,null=false)
@级联(值={CascadeType.ALL})
公共地图类别;
@凌驾
公共TrxReport delete(){
对于(AtmPosTrxStatCategory目录:categories.values()){
如果(cat!=null){
类别。删除(类别名称);
cat.delete();
}
}
super.delete();
归还这个;
}
}
然而,我总是收到一个约束冲突错误,抱怨StatCategory表上的categories_id。
是否需要使用自定义查询完成删除,或者是否可以实现与上述类似的操作?

我认为您出现了错误,因为您尝试删除的类别由于级联类型而被删除了两次。所有。如果使用
删除
,则如果从
TrxReport
中的
categories
集合中删除了
TrxStatCategory
,则也会删除
trxstatcategority

在不重写
delete()
的情况下使用
删除如何:

@实体
公共类TrxReport扩展模型{
@CollectionTable(name=“StatCategory”)
@MapKeyColumn(name=“TrxReport\u key”,null=false)
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,orphan=true)
公共地图类别;
}

我认为您出现了错误,因为您试图删除的类别由于
级联类型而被删除了两次。如果使用
删除
,则如果从
TrxReport
中的
categories
集合中删除了
TrxStatCategory
,则也会删除
trxstatcategority

在不重写
delete()
的情况下使用
删除如何:

@实体
公共类TrxReport扩展模型{
@CollectionTable(name=“StatCategory”)
@MapKeyColumn(name=“TrxReport\u key”,null=false)
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,orphan=true)
公共地图类别;
}

我认为使用hte@OneToMany注释无法持久化实体地图。您是否尝试将其与一起使用?您能否将其设置为一对多,然后有一个单独的只读属性来做映射?我不认为实体的映射可以使用hte@OneToMany注释来持久化。你试过使用它吗?你能不能让它成为一对多,然后有一个单独的只读属性来做映射?
@Entity
public class TrxReport extends Model {

    @CollectionTable(name = "StatCategory")
    @MapKeyColumn(name = "TrxReport_key", nullable = false)
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    public Map<String, TrxStatCategory> categories;

}