A range of options are available for that. Hibernate will assume that an instance is unsaved
Transient instance if :
a) The identifier property is null
b) The version property (if exists) is null.
c) You supply an unsaved-value attribute in
d) You supply Hibernate Interceptor and return Boolean.TRUE from Interceptor.isUnsaved()
after checking the instance in your code.