Заставить Hibernate вернуть правильный прокси подкласса - PullRequest
3 голосов
/ 17 декабря 2011

У меня есть следующие классы Hibernate:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class User {
    @Id
    private Long id;
}

@Entity
public class Patient extends User {
    /* ... */
}

@Entity
public class Doctor extends User {
    /* ... */
}

На этапе входа в систему я выполняю

User user = db.createQuery("from User where email = :email")
              .setParameter("email", email)
              .uniqueResult();

К сожалению, user всегда является прокси User, поэтому я не могу привести его к Doctor. Могу ли я заставить Hibernate присмотреться к типу пользователя и вернуть правильный прокси, возможно, без выполнения другого запроса?

1 Ответ

1 голос
/ 17 декабря 2011

Я думаю, он должен вернуть правильный экземпляр подкласса, если этот пользователь еще не загружен как пользователь (например, из-за ранее загруженной ассоциации).

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

Если вы заранее знаете, что это Доктор, тогда используйте «от Доктора», а не «от Пользователя».

...