2013-12-10 49 views
0

我有我覺得必須是一個共同的問題:我有一個Communication對象,描述與Person溝通的方式。當然,我在一個數據表中顯示一個人的實例Set<Communication>。我希望最終用戶能夠從該表中動態添加和刪除行。如何編輯,添加和刪除設置中的瞬態實體?

這兩個對象基於其數據庫PK通常使用equals()hashCode()。 PK由postgresql序列生成(列爲serial)。這在這裏是不夠的,因爲我只能用一個null PK添加一個(瞬態)元素。

hibernate manual提供的唯一選項是在業務等價方面實現equals和hashCode。由於通信對象基本上是一個榮耀String,這是不可能的。用戶需要編輯對象的每個方面。

我曾經想過創建一個序列服務,爲臨時實體「保留」一個id並在創建時將它分配給對象。但是我擔心這會干擾Hibernate確定實體是否爲瞬態的能力。

所以問題是:當我無法提供業務密鑰時,是否有更好的選項來編輯,添加和刪除瞬態對象?

回答

0

忘掉休眠片刻。您正在討論將元素添加到集合中,並且他們根本沒有標識,因爲所有屬性都可能被修改,並且他們沒有標識符。那是錯的。集合用於可識別的元素。使用列表或使元素可識別。你可以給它們分配一個臨時ID或一個真正的數據庫ID或者其他的東西,但是這個問題不是Hibernate的問題,而是關於Set的概念。

+0

這就是爲什麼我說一個解決方案是在它們的最終持久性之前獲取序列值並將其分配給對象。如果Hibernate讓我*,我會繼續。但是,對於使用'@ OrderColumn'的List來說,你可能是正確的選擇。 – mabi

相關問題