What you are describing seems to an expected behaviour of Hibernate if you are using Session.load() method to load an object by ID. From the javadoc of Session.load():
Quote:
Return the persistent instance of the given entity class with the given identifier, assuming that the instance exists.
You should not use this method to determine if an instance exists (use get() instead). Use this only to retrieve an instance that you assume exists, where non-existence would be an actual error.
Another way to load an object by ID is to use Session.get(), which checks with the database if there is an object or not. Session.get() doesn't throw an exception if the entity doesn't exists. It returns 'null' instead. I don't know if Spring uses the get() or load() method. Maybe it is possible to override/configure which one to use.