See
http://www.hibernate.org/109.html.
I understand that you're using id for equals(). Then if you put multiple new objects into a set only one of them will be found in the set (because java uses equals() to distinguish between elements in the set). Instead, use some other properties for equals(). Preferably ones that won't change, e.g. the timestamp when the object was created etc.
A good idea is to use the equals() and hashCode() builders provided in the jakarta commons-lang package, they are good.