Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA条件按枚举值查询顺序_Jpa_Enums_Sql Order By_Case_Criteria Api - Fatal编程技术网

JPA条件按枚举值查询顺序

JPA条件按枚举值查询顺序,jpa,enums,sql-order-by,case,criteria-api,Jpa,Enums,Sql Order By,Case,Criteria Api,如何使用JPA标准对枚举进行排序。 例如,获取如下查询: “当“黄色”时按大小写颜色排序,当“红色”时按1排序,然后按3排序2结束”这应该可以,您只需要用asc或desc包装大小写表达式 您尝试了什么代码,出现了什么错误 看,, JPA标准API中的Case表达式可以解决这个问题 CriteriaBuilder cb = entityManager.getCriteriaBuilder() cb.selectCase(color) .when(color.YELLOW, 1) .when(co

如何使用JPA标准对枚举进行排序。 例如,获取如下查询:
“当“黄色”时按大小写颜色排序,当“红色”时按1排序,然后按3排序2结束”

这应该可以,您只需要用asc或desc包装大小写表达式

您尝试了什么代码,出现了什么错误

看,,
JPA标准API中的Case表达式可以解决这个问题

CriteriaBuilder cb = entityManager.getCriteriaBuilder()

cb.selectCase(color)
.when(color.YELLOW, 1)
.when(color.YELLOW, 2)
.otherwise(3))

我认为使用JPQL是不可能的,但您可以使用JPA NativeQuery。我想既然JPQL支持case when in order by子句,JPA标准API也应该支持它。但是我们在哪里指定要按哪个列排序呢?我只想知道JPA标准中是否有类似于中指定的API,但现在我得到了错误:-java.lang.ClassCastException:color不能转换为org.hibernate.ejb.Criteria.Renderable atorg.hibernate.ejb.criteria.expression.SimpleCaseExpression.render(SimpleCaseExpression.java:146)在org.hibernate.ejb.criteria.expression.CompoundSelectionImpl.render(CompoundSelectionImpl.java:99)上org.hibernate.ejb.criteria.expression.CompoundSelectionImpl.RenderProject(CompoundSelectionImpl.java:110)org.hibernate.ejb.criteria.QueryStructure.RenderSee-这是一个已知但被忽略的错误。与eclipselink一起使用,它也有与case表达式相关的恼人的简单错误:)。请尝试
cb.selectCase().when(cb.equals(color,color.YELLOW),1)。when(cb.equals(color,color.RED),3)。否则(2)
刚刚测试了解决方法,由于存在三年的错误,它无法工作,所以可能唯一的可能性是自己修补休眠或去找其他JPA提供商:)