相关疑难解决方法(0)

DAO和服务层(JPA/Hibernate + Spring)

我正在设计一个基于JPA/Hibernate,Spring和Wicket的新应用程序.DAO和服务层之间的区别对我来说并不清楚.根据维基百科,DAO是

一个对象,它为某种类型的数据库或持久性机制提供抽象接口,提供一些特定的操作而不暴露数据库的细节.

我想知道DAO是否可以包含对数据访问没有太多帮助的方法,但使用查询更容易执行?例如"获取在某些机场运营的所有航空公司的清单"?听起来我更多的是服务层方法,但我不确定在服务层中使用JPA EntityManager是否是良好实践的一个例子?

java architecture spring dao jpa

62
推荐指数
3
解决办法
4万
查看次数

是否有任何良好的通用JPA DAO实现?

根据这篇文章,通用JPA DAO(数据访问对象)是一个非常好的模式.

有没有好的实施?

java dao jpa

6
推荐指数
1
解决办法
2万
查看次数

使用Guice的GenericDAO,使用Generics和ParameterizedType

大多数人应该熟悉为Spring + hibernate制作Generic DAO.参考资料来自http://www.ibm.com/developerworks/java/library/j-genericdao/index.html,单DAO和通用CRUD方法(JPA/Hibernate + Spring)有所改进

这种改进是对类型的检测,因为它是超类的一部分,而不是使用构造函数来判断它是哪个类

public GenericDaoJpaImpl() {
    ParameterizedType genericSuperclass = (ParameterizedType) getClass()
         .getGenericSuperclass();
    this.entityClass = (Class<T>) genericSuperclass
         .getActualTypeArguments()[0];
}
Run Code Online (Sandbox Code Playgroud)

但是,这个演员会因Guice而失败.要注入,接口和类需要绑定在这样的模块中

bind(TestDao.class).to(TestDaoImpl.class);
Run Code Online (Sandbox Code Playgroud)

通过这样做,我们的GenericDAO的构造函数将无法工作,因为以下内容:

getClass().getGenericSuperclass() = java.lang.Class
getClass().getName() = com.gwtplatform.samples.basic.server.dao.TestDaoImpl$$EnhancerByGuice$$5fe0d6fd
Run Code Online (Sandbox Code Playgroud)

与Spring + Hibernate返回的内容相反

getClass().getGenericSuperclass() = sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
getClass().getName() =  com.gwtplatform.samples.basic.server.dao.TestDaoImpl
Run Code Online (Sandbox Code Playgroud)

我现在只是在我的扩展DAO中使用超级构造函数,但是仍然希望获得该类型而不是提供它,任何想法?

java generics hibernate guice

1
推荐指数
1
解决办法
2171
查看次数

标签 统计

java ×3

dao ×2

jpa ×2

architecture ×1

generics ×1

guice ×1

hibernate ×1

spring ×1