This is by design to allow attaching new entities to existing object graphs and then merge only the root. The only way to prevent writing of overwriting with stale data is to use optimistic locking (an @Version field) which would throw an exception when a new object already has a lock value.