【发布时间】:2012-01-24 01:04:43
【问题描述】:
大多数人应该熟悉为 Spring + hibernate 制作通用 DAO。参考来自这里http://www.ibm.com/developerworks/java/library/j-genericdao/index.html,但在Single DAO & generic CRUD methods (JPA/Hibernate + Spring)上有一个改进
这种改进是检测类型,因为它是超类的一部分,而不是使用构造函数来判断它是哪个类
public GenericDaoJpaImpl() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass()
.getGenericSuperclass();
this.entityClass = (Class<T>) genericSuperclass
.getActualTypeArguments()[0];
}
但是,这个施法会因 Guice 而失败。要注入,接口和类需要像这样绑定在一个模块中
bind(TestDao.class).to(TestDaoImpl.class);
通过这样做,我们的 GenericDAO 的构造函数将无法工作,原因如下:
getClass().getGenericSuperclass() = java.lang.Class
getClass().getName() = com.gwtplatform.samples.basic.server.dao.TestDaoImpl$$EnhancerByGuice$$5fe0d6fd
与 Spring + Hibernate 返回的相反
getClass().getGenericSuperclass() = sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
getClass().getName() = com.gwtplatform.samples.basic.server.dao.TestDaoImpl
我现在只是在我的扩展 DAO 中使用超级构造函数,但仍然想获取类型而不是提供它,有什么想法吗?
【问题讨论】:
标签: java hibernate generics guice