私のモデルには、抽象的な「User」クラスと、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 は「プロパティを解決できませんでした: ロール」と不平を言います (ユーザー クラスには明示的なロール プロパティがないため、これは実際には理にかなっています)
。