将OrderBy子句添加到命名查询

时间:2010-11-19 07:22:39

标签: jpa

是否可以在运行时向JPA Named查询中添加OrderBy子句?

3 个答案:

答案 0 :(得分:2)

创建EntityManagerFactory时,命名查询由持久性提供程序处理。您无法在运行时动态更改/修改/附加有关命名查询的任何内容。

如果您使用的是JPA 2.0,并且需要一种在运行时进行高性能动态查询的方法,那么您应该查看Criteria API。

答案 1 :(得分:1)

来自Java EE 5文档:“用于在Java持久性查询语言中指定命名查询,该查询语言是以元数据表示的静态查询。查询名称的范围限定为持久性单元”。

正如它所说,它是静态的&您无法在运行时更改查询。 而是使用自定义查询或如果订购元素是固定的,那么您可以使用注释;

字段:

@OrderBy(value="nickname")
List<Person> friends;

方法:

@OrderBy("nickname ASC")
public List<Person> getFriends() {...};

答案 2 :(得分:0)

即使您无法在命名查询中添加order-by子句,也可以提供参数orderBy。以下是完全有效的查询:

SELECT u FROM User u ORDER BY :orderBy

你将改变订购方式:

query.setParameter("orderBy", "id");