是否可以在运行时向JPA Named查询中添加OrderBy子句?
答案 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");