The problem is that you have not specified an appropriate "unsaved value" for your defined id. The default value is "null", which means that any value other than a null will result in an update, rather than an insert because it is not "unsaved". Check out the options
http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-id and see which one works best for your situation. But this seems to get hairy with assigned ids...
My suggestion: if at all possible, move the id generation logic into an IdentifierGenerator implementation and have Hibernate manage that piece for you.