从通用T派生类


问题内容

我有一个参数化的休眠dao,它执行基本的crud操作,并且当将参数化用作委托时,对给定的dao执行基本的crud操作。

public class HibernateDao <T, ID extends Serializable> implements GenericDao<T, ID>

我希望能够在运行时从T派生Class以便在Hibernate中创建条件查询,例如:

public T findByPrimaryKey(ID id) {
    return (T) HibernateUtil.getSession().load(T.getClass(), id);
}

我知道:

T.getClass()

不存在,但是有什么方法可以在运行时从T导出正确的Class对象吗?

我研究了泛型和反射,但没有提出合适的解决方案,也许我错过了一些东西。

谢谢。


问题答案:

您可以将Class作为构造函数参数传递。

public class HibernateDao <T, ID extends Serializable> implements GenericDao<T, ID> {

    private final Class<? extends T> type;

    public HibernateDao(Class<? extends T> type) {
        this.type = type;
    }

    // ....

}