我尝试使用休眠从哈希映射中删除一个项目。
这是我对收藏的配置:
@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;
}
这是我对同一对象的删除功能:
@Transactional
public void removeCharacteristic(Characteristic charact)
{
// getCharacteristics().size();
getCharacteristics().remove(charact.getShortcut());
}
使用 removeCharacteristic 不会删除数据库中的项目。如果我取消注释该行以获取列表的大小(这会强制加载集合),则该记录将被很好地删除。
问题是什么 ?如何在不强制加载整个集合的情况下实现它?
编辑:我用列表替换地图,它运行起来就像一个魅力(之前没有通过 size() 函数加载它)......这很奇怪......所以我的问题通过列表解决了,但我我很想知道为什么它不运行?