Я думаю, он должен вернуть правильный экземпляр подкласса, если этот пользователь еще не загружен как пользователь (например, из-за ранее загруженной ассоциации).
Если нет, то вы не можете позволить ему вернуть фактический экземпляр Доктора. Поэтому вам следует либо вызвать полиморфный метод User, либо использовать собственный код Hibernate, чтобы проверить, является ли он прокси, инициализировать его и получить упакованный объект.
Если вы заранее знаете, что это Доктор, тогда используйте «от Доктора», а не «от Пользователя».