如果您是我,我将不返回结果(
Set)本身,而是返回封装结果检索的内容。某种ResultBuilder。看:
public interface ResultBuilder<T> { ResultBuilder<T> withOffset(int offset); ResultBuilder<T> withLimit(int limit); ResultBuilder<T> orderedBy(String property); List<T> result();}然后更改DAO方法签名:
ResultBuilder<Person> findPersonsByName(String name);
这样,您就可以从查找族方法中排除与业务无关的参数。如果您不想让客户指定此参数,则不要让他指定。
只是要清楚:
public final class HibernateGenericResultBuilder<T> implements ResultBuilder<T> { private final Criteria criteria; public HibernateGenericResultBuilder(Criteria criteria) { this.criteria = criteria; } @Override public ResultBuilder<T> withOffset(int offset) { criteria.setFirstResult(offset); return this; } @Override public ResultBuilder<T> withLimit(int limit) { criteria.setMaxResults(limit); return this; } @Override public ResultBuilder<T> orderedBy(String property) { criteria.addOrder(Order.asc(property)); return this; } @Override public List<T> result() { return new linkedHashSet<T>(criteria.list()); }}


