我尝试从散列映射与休眠删除项目。

下面是我的配置上集合:

@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); 

编辑: 我看到你说,如果你取消对一条线,它工作正常,那么这很有可能不适用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top