Exception jpql按大小排序错误

Exception jpql按大小排序错误,exception,jpql,Exception,Jpql,有人能解释为什么会抛出JPQL异常吗 Query q = em.createQuery("select object(o) from SiteMember as o order by size(o.memberThread) desc"); memberThread refer a list. 很可能是因为您使用的JPA实现(数据库供应商也很重要),它没有用于此类查询的供应商扩展。根据JPA 2.0,以下类型的值可以按顺序排列: 1.A state_field_path_expressio

有人能解释为什么会抛出JPQL异常吗

Query q = em.createQuery("select object(o) from SiteMember as o order by size(o.memberThread) desc");

memberThread refer a list.

很可能是因为您使用的JPA实现(数据库供应商也很重要),它没有用于此类查询的供应商扩展。根据JPA 2.0,以下类型的值可以按顺序排列:

 1.A state_field_path_expression that evaluates to an orderable state field of an 
   entity or embeddable class abstract schema type designated in the SELECT clause 
   by one of the following:  
 • a general_identification_variable  
 • a single_valued_object_path_expression  

 2.A state_field_path_expression that evaluates to the same state field of the same 
  entity or embeddable abstract schema type as a state_field_path_expression in the
  SELECT clause

3.A result_variable that refers to an orderable item in the SELECT clause for which 
 the same result_variable has been specified. This may be the result of an
 aggregate_expression, a  scalar_expression, or a state_field_path_expression in the 
 SELECT clause.

例如,您的查询适用于EclipseLink(2.3.2)和MySQL

我使用Toplink,这段代码运行良好“从MemberThread中选择对象(o)作为o,其中大小(o.replys)=“0”order by o.id desc”。请问有什么解决方案吗?这是有效的JPQL查询。问题在于顺序和非法值的结合。很可能只是查询的排序结果很好,至少并没有可移植性问题。如果这不是选项,您可以尝试以下操作(不保证工作):添加“大小(o.memberThread)作为ord”以进行选择,按ord排序,并在SiteMember中按字段分组。然后它当然会变得丑陋,因为结果还包含ORDER BY只需要的属性。不客气,不幸的是,它可能无法解决您的问题(我没有TopLink进行测试)。