В моей модели у меня есть абстрактный класс «Пользователь» и несколько подклассов, таких как Applicant, HiringManager и Interviewer. Они находятся в одной таблице, и у меня есть один DAO для управления ими всеми.
Пользователь:
@Entity
@Table(name="User")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="role",
discriminatorType=DiscriminatorType.STRING
)
public abstract class User extends BaseObject implements Identifiable<Long> ...
HiringManager (например):
@Entity
@DiscriminatorValue("HIRING_MANAGER")
public class HiringManager extends User ...
Теперь, если бы я хотел, скажем, получить всех менеджеров по найму, которые не связаны с отделом, как бы я это сделал? Я думаю, это будет выглядеть примерно так:
DetachedCriteria c = DetachedCriteria.forClass(User.class);
c.add(Restrictions.eq("role", "HIRING_MANAGER"));
c.add(Restrictions.isNull("department"));
List<User> results = getHibernateTemplate().findByCriteria(c);
Но когда я запускаю это, Hibernate жалуется, что «не может разрешить свойство: роль» (что на самом деле имеет смысл, поскольку класс User действительно не имеет явного свойства роли)
Так как правильно делать то, что я пытаюсь сделать?