【发布时间】:2013-10-17 15:07:03
【问题描述】:
我有一个 Java Web 应用程序,使用 JPA 进行存储,并遵循 MVC 模式。在许多方法中,我必须返回一个List<Product>,我应该按其名称订购。 排序逻辑在哪里更好?
在像这样的控制器方法中,在 Query 本身中:
public List<Product> obtainProductList()
{
Query query = em.createQuery("SELECT g FROM Product g ORDER BY g.name");
List<Product> ret = query.getResultList();
if (ret == null)
{
return new ArrayList<>();
}
else
{
return ret;
}
}
或者在将数据检索到页面本身时可能在 Manager 类中?:
public List<Product> getProducts()
{
products = controller.obtainProductList();
//Sort the list by comparators, for example;
return this.products;
}
目前我正在使用第一种方法,但我对新方法持开放态度。
【问题讨论】:
-
在查询中使用它。数据库针对此类操作进行了优化
-
在服务器端排序不是一个选项,尤其是当您需要根据来自巨大连接的标准进行排序时。让数据库做这个工作,JPA 就是为了让你做这个。
-
除非您知道数据库不会像@verbose-mode 所说的那样将数据留给数据库的特殊信息。
-
查看objectdb.com/java/jpa/query/jpql/order的最后一个例子。 IMO,这是最好的方法,因为它提供了类型检查。