我怎样才能把Hibernate HashMap中删除一个项目?
题
我尝试从散列映射与休眠删除项目。
下面是我的配置上集合:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@OneToMany(mappedBy = "game", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Where(clause = "charactType='charact'")
@MapKey(name = "shortcut")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public Map<String, Characteristic> getCharacteristics()
{
return characteristics;
}
public void setCharacteristics(Map<String, Characteristic> characteristics)
{
this.characteristics = characteristics;
}
和这里是在同一对象上我的remove函数:
@Transactional
public void removeCharacteristic(Characteristic charact)
{
// getCharacteristics().size();
getCharacteristics().remove(charact.getShortcut());
}
使用removeCharacteristic数据库中不删除该项目。 如果我取消注释行以获取列表的大小(强制征收的负载),记录被删除。
这是什么问题?我怎样才能实现它,而不强迫整个集合的负载?
编辑: 我更换一个列表地图,它运行就像一个魅力(不考虑大小()函数之前加载它)...这是很奇怪的。所以我的问题是解决了名单,但我很好奇知道为什么不跑?
解决方案 3
这是一个休眠错误,这是现在固定在较新的版本
其他提示
尝试明确设置的集合。 e.g。
c = getCharacteristics();
c.remove(...);
setCharacteristics(c);
既然你说,当使用一个列表,而不是工作的,是有可能,你被不正确地使用的地图的一个.remove()函数?
的地图的上的一个.remove()函数将对象的KEY 强>要删除,的不实际的对象强>
myMap.remove(MyObject.getKey()); //Or however you would get the key
<强>列表的一个.remove()函数将对象强>要删除;
myList.remove(MyObject);
编辑: 我看到你说,如果你取消对一条线,它工作正常,那么这很有可能不适用。的
不隶属于 StackOverflow