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;
}