Exception jpql按大小排序错误
有人能解释为什么会抛出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
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进行测试)。