2010-07-24 106 views
1

我已經設置休眠,給我一個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認識到,即使我已經分配並返回了一個不同的集合實例,集合實際上包含了它曾經用過的所有項目,並且沒有必要刪除並重新插入它們所有?

+0

爲什麼設計決定使用整數來代替您的實際班級? 這不是一個錯誤,而是Hibernate的功能,因爲您正在創建不在持久性上下文中的新對象,並將它們放入持久性上下文中。刪除沒有意義,但沒有特定的代碼很難說清楚。 顯示一些代碼/映射可能有助於更好地理解您的問題。 – apiri 2010-07-25 04:18:15

回答

1

我認爲實現目標的最佳方法是使用UserType。基本上它可以讓你處理從SQL到你自己的對象(來回)的轉換。

你可以看到一個關於如何使用它的例子here