从泛型 T 派生类
我有一个参数化的 hibernate dao,它执行基本的增删改查操作,并且当参数化时用作委托来完成给定 dao 的基本增删改查操作。
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 对象吗?
我看过泛型和反射,但没有想出合适的解决方案,也许我错过了一些东西。
谢谢。
I have a parameterized hibernate dao that performs basic crud operations, and when parameterized is used as a delegate to fulfil basic crud operations for a given dao.
public class HibernateDao <T, ID extends Serializable> implements GenericDao<T, ID>
I want to be able to derive Class from T at runtime to create criteria queries in Hibernate, such that:
public T findByPrimaryKey(ID id) {
return (T) HibernateUtil.getSession().load(T.getClass(), id);
}
I know:
T.getClass()
does not exist, but is there any way to derive the correct Class object from T at runtime?
I have looked at generics and reflection but have not come up with a suitable solution, perhaps I am missing something.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以将类作为构造函数参数传递。
You could have the Class passed as a constructor argument.
有一种方法可以使用反射来找出类型参数
T
的class
:这是我使用它的方式:
我想这仅在您的
ConcreteEntityDao 时才有效
是HibernateDao
的直接超类。我在这里找到了它:www.greggbolinger.com/blog/2008/04/17/1208457000000.html
There is the way how to figure out
class
of type argumentT
using reflection:Here is the way how I use it:
I suppose this only works when your
ConcreteEntityDao
is a direct superclass ofHibernateDao<ConcreteEntity,...>
.I've found it here: www.greggbolinger.com/blog/2008/04/17/1208457000000.html