Mysql org.hibernate.engine.jdbc.spi.SqlExceptionHelper:order子句中的未知列“PrefId”

Mysql org.hibernate.engine.jdbc.spi.SqlExceptionHelper:order子句中的未知列“PrefId”,mysql,hibernate,jpa,sql-order-by,Mysql,Hibernate,Jpa,Sql Order By,我正在尝试对视图前面的一列执行加权排序。我在现场看到了订单 这正是我的疑问: 选择 e、 employeeName作为empName, e、 员工登录为empAlias, e、 经理姓名作为经理姓名, e、 managerLogin作为managerAlias, b、 buildingName作为buildingName, b、 以国为国,, b、 区域作为区域, 如果w.preferenceId为NULL,则0,否则w.preferenceId以前缀结束, 如果w.LastUpdateDate

我正在尝试对视图前面的一列执行加权排序。我在现场看到了订单

这正是我的疑问:

选择 e、 employeeName作为empName, e、 员工登录为empAlias, e、 经理姓名作为经理姓名, e、 managerLogin作为managerAlias, b、 buildingName作为buildingName, b、 以国为国,, b、 区域作为区域, 如果w.preferenceId为NULL,则0,否则w.preferenceId以前缀结束, 如果w.LastUpdateDate为NULL,则e.LastUpdateDate ELSE w.LastUpdateDate结束为updateDate 来自员工_详情e 内部连接建筑物\u详图如e.building=b.building上的b e.employeeId=w.employeeId上的左加入工作区详细信息 其中e.IsWorkplaceRefScopeIncluded=1 按字段前缀4、3、99、2、1、0排序; 查询在我的工作台上运行良好,结果与预期的一样,但在通过hibernate执行相同的查询时

org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Unknown column 'PrefId' in 'order clause'
我还尝试了FIELDw.preferenceId的-ORDER,4,3,99,2,1,0,但这似乎不符合加权排序顺序


我哪里做错了???

你在这里似乎有两个问题。首先,PrefId是您在查询前面的select子句中定义的别名。Hibernate似乎在抱怨这一点,所以只需使用preferenceId即可。其次,字段是MySQL扩展,不是ANSI标准的一部分,也不是Hibernate查询语言的一部分。但是,您可以重构ORDER BY子句:

为此,请使用大小写表达式:

ORDER BY
    CASE COALESCE(w.preferenceId, 0) WHEN 4  THEN 1
                                     WHEN 3  THEN 2
                                     WHEN 99 THEN 3
                                     WHEN 2  THEN 4
                                     WHEN 1  THEN 5
                                     WHEN 0  THEN 6
                                     ELSE 7  END

实际上,你似乎有两个问题。首先,PrefId是您在查询前面的select子句中定义的别名。Hibernate似乎在抱怨这一点,所以只需使用preferenceId即可。其次,字段是MySQL扩展,不是ANSI标准的一部分,也不是Hibernate查询语言的一部分。但是,您可以重构ORDER BY子句:

为此,请使用大小写表达式:

ORDER BY
    CASE COALESCE(w.preferenceId, 0) WHEN 4  THEN 1
                                     WHEN 3  THEN 2
                                     WHEN 99 THEN 3
                                     WHEN 2  THEN 4
                                     WHEN 1  THEN 5
                                     WHEN 0  THEN 6
                                     ELSE 7  END