I have set up Hibernate to give me a Set<Integer>
which I convert internally to and from a Set<MyObjectType>
(MyObjectType
can be represented by a single integer). That is to say, When Hibernate calls my void setMyObjectTypeCollection(Set<Integer> theSet)
method I iterate through all the elements in theSet
and convert them to MyObjectType
. When Hibernate calls my Set<MyObjectType> getMyObjectTypeCollection()
I allocate a new HashSet and convert MyObjectType
s to Integer
s.
The problem is that every time I call commit
, Hibernate deletes everything in the collection and then re-inserts it regardless of whether any element of the collection has changed or even that the collection itself has changed.
While I don't technically consider this a bug, I am afraid that deleting and inserting many rows very often will cause the database to perform unnecessarily slowly.
Is there a way to get Hibernate to recognize that even though I have allocated and returned a different instance of the collection, that the collection actually contains all the items it used to and that there is no need to delete and reinsert them all?