我已經設置休眠,給我一個Set<Integer>
,我內部轉換和從一個Set<MyObjectType>
(MyObjectType
可以表示一個整數)。也就是說,當Hibernate調用我的void setMyObjectTypeCollection(Set<Integer> theSet)
方法時,我遍歷了theSet
中的所有元素並將它們轉換爲MyObjectType
。當Hibernate調用我的Set<MyObjectType> getMyObjectTypeCollection()
時,我分配一個新的HashSet並將MyObjectType
s轉換爲Integer
s。休眠集合和我自己的集合之間轉換
問題在於,每次我打電話給commit
時,Hibernate都會刪除集合中的所有內容,然後重新插入它,無論該集合中的任何元素是否已更改,或者甚至集合本身是否已更改。
雖然我在技術上沒有考慮到這個錯誤,但恐怕經常刪除和插入很多行會導致數據庫執行不必要的緩慢。
有沒有辦法讓Hibernate認識到,即使我已經分配並返回了一個不同的集合實例,集合實際上包含了它曾經用過的所有項目,並且沒有必要刪除並重新插入它們所有?
爲什麼設計決定使用整數來代替您的實際班級? 這不是一個錯誤,而是Hibernate的功能,因爲您正在創建不在持久性上下文中的新對象,並將它們放入持久性上下文中。刪除沒有意義,但沒有特定的代碼很難說清楚。 顯示一些代碼/映射可能有助於更好地理解您的問題。 – apiri 2010-07-25 04:18:15