2009-12-14 21 views
2

我嘗試從hibernate映射中刪除一個項目。如何從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; 
} 

,這裏是同一個對象在我刪除功能:

@Transactional 
public void removeCharacteristic(Characteristic charact) 
{ 
    // getCharacteristics().size(); 

    getCharacteristics().remove(charact.getShortcut()); 
} 

使用removeCharacteristic數據庫中不刪除該項目。 如果我取消註釋該行以獲取列表的大小(強制加載該集合),該記錄被完全刪除。

什麼問題?我如何在不強迫整個集合的負載的情況下實現它?

編輯: 我用一個列表替換地圖,它像一個魅力運行(沒有加載它以前的大小()函數)...這很奇怪...所以我的問題解決了與列表,但我很想知道爲什麼它不運行?

+0

您的交易是否正確提交(和會話刷新)? –

+0

我想是的,因爲如果它沒有被刷新,未註釋的行就什麼都不會做。 –

+0

您可以爲事務管理器啓用日誌記錄並進行休眠以查看配置是否正確? –

回答

0

這是一個休眠的錯誤,這是現在固定在新版本

0

嘗試明確設置集合。 例如

c = getCharacteristics(); 
c.remove(...); 
setCharacteristics(c); 
+0

不,它什麼都不做。 –

0

既然你說它在你使用列表的時候有效,那麼你有可能錯誤地使用了地圖的.remove()函數嗎?

的一個.remove()函數映射上花費要刪除的對象,不是實際的對象的關鍵。

myMap.remove(MyObject.getKey()); //Or however you would get the key 

列表的一個.remove()函數將要刪除的對象;

myList.remove(MyObject); 

編輯: 我看到你說,如果你取消對一條線,它工作正常,那麼這很有可能不適用。

+0

是的,你是對的,但我有效地使用良好的關鍵刪除對象;) –