实体:用户
和
@NamedQuery(name = “Users.findAll”,查询=“选择[u]来自用户的ü “)
使用方法如下:
Query query = em.createNamedQuery("Technologies.findByIsActive", Technologies.class);
query.setFirstResult(technologiesTableModel.getLowItemIndex());
query.setMaxResults(technologiesTableModel.getPageRange().intValue());
List<Technologies> technologies = query.setParameter("isActive", 'Y').getResultList();
但我想排序这个结果动态。我有一个字符串包含我想要排序的列名称(字段内容来自请求)。我怎么能做到这一点,没有新的查询每个领域和方向,并键入安全(没有直接附加顺序的条款与字段名称)。
我的研究显示建议使用CriteriaQuery中(我无法找到例子与使用NamedQuery上述实体的定义),TypedQuery(我无法找到例如使用排序,只能用setFirstResult和setMaxResults。但我需要排序和分页)或JpaRepository(我无法找到具有良好说明的完整实施示例)。
那我要的是通过现场的名字我的数据进行排序(即我有一个字符串),之后寻呼它(与setFirstResult和setMaxResults)。我想这样做命名查询,我被定义(在实体类声明)和没有定义查询飞行或附加顺序子句查询结束与字符串连接。
编辑:
所有我需要的是一个很好的解释这是如何得来实现(与所有好的做法)。我不知道该怎么做。所有我尝试是:
- 我的查询是在一个地方(大部分)
- 字符串连接是不是好的做法创建查询。
errm,由于NamedQuery是静态定义的,因此您可以静态(不是动态地)定义查询字符串。 Criteria或JPQL都支持您在运行时定义查询。任何JPA文档都会显示。 http://www.datanucleus.org/products/accessplatform_5_1/jpa/query.html#_criteria_api_ordering –
命名查询不是动态的。看看这个主题https://stackoverflow.com/questions/22167730/dynamic-named-query-in-entity-class-using-jpql-example我会去与标准或SQL。由于JPA标准API不是最好的,QueryDSL可能是一个选项或Hibernate API本身。 – matthias
如果不使用该JPA提供程序,或者您想要可移植性(即理智),则不会使用Hibernate API –