非常好的帖子,也是一直困扰我的问题。
Criteria是一种很理想的解决方案,(当然不是指Hibernate的Criteria,即使Hibernate的Criteria将来设计的如何完美,我们也不能让持久层框架直接以它作为查询的OO封装,因为这样我们的持久层使用者,通常是业务层就必须耦合于Hiernate了,所以Criteria应该是独立设计的接口,实现当然可以来源于任何地方,包括Hibernate)。
但,问题还是,要设计一个能符合多种复杂查询的完全OO的Criteria,确实不是一件容易事情,至少Hibernate还没能很好的解决。