关于使用Hibernate的任意条件组合查询的实现

07-08-20 wczwcg

其实没有用orm之前,如果系统分层比较彻底的话,也同样有这个问题。我们崇尚service层不包含数据访问的东西,包括sql语句等。这些都应该是dao层实现。但是很多查询功能都需要能够多条件任意组合查询。这个时候数dao层应该如何支撑?

我的想法是:

1.做一个比较通用的查询功能,比如设计一个参数类,查询条件通过这个参数类传递到dao层。dao负责解析;

2.就是dao层穷举这些所有可能的组合,分别为每一个组合生成一个接口方法。

看到有人在Hibernate中是使用detachedCretira来实现的。在查询端构造好detachedCretira,然后传递到dao去查询。但是这种方法违背了分层思想,而且导致了系统对hibernate的依赖。

不知道有没有更好的方法?

banq
2007-08-22 09:23

查询条件可以动态组合,如果不喜欢用detachedCretira,那么用自己的Cretira。这个我在JiveJdon3中使用了,如果愿意可以参考。

查询条件可以动态组合,查询结果必须是模型对象,因为按照Evans DDD,Hibernate只是模型的仓库,所以,我们从持久层Dao获得是完整模型对象,而不是单个字段。