这里是Spring/HiberNate/MySQL/JPA。我有以下代码:
public void setOrdering(
SearchRequest searchRequest,
CriteriaQuery query,
CriteriaBuilder builder,
Root<? extends MyEntity> root) {
String sortParam = "reportedOn";
Expression expression = builder.selectCase()
.when(builder.isNull(root.get(sortParam)), root.get(sortParam))
.otherwise(root.get(sortParam));
Order order = (searchRequest.isAscending())
? builder.asc(expression)
: builder.desc(expression);
query.orderBy(order);
}
基本上,我试图实现CriteriaBuilder
/JPA等效的:
SELECT
*
FROM
mytable
WHERE
<lots of predicates here>
ORDER BY reported_on IS NULL, reported_on <ASC/DESC>
我已经添加了WHERE谓词,我只是在努力处理查询。订购人(…)
。
在运行时,
searchRequest。isAscending()
为false,结果正常,包含null
值的记录在结果末尾排序。
但是如果
搜索请求。isAscending()
为真,上次尝试的为空似乎根本不起作用。
它看起来不像是JPA的CriteriaBuilder
支持NULLS LAST
。我实际上是通过一个SQL的"hack"得到这个工作的:
String sortParam = "reportedOn";
Order order = (searchRequest.isAscending())
? builder.desc(builder.neg(root.get(sortParam)))
: builder.desc(root.get(sortParam));
query.orderBy(order);
基本上ORDER BY-reported_onDESC
与ORDER BYreported_onASC
做同样的事情,但是它用NULL
reported_on
值对记录进行排序,一直到搜索结果的底部,这就是NULLS LAST
应该做的事情。
您混淆了Spring和JPA API,此处查询
来自JPA API,因此您需要使用以下内容进行排序:
CriteriaBuilder cb = ...
Root root = ...
query.orderBy(cb.asc(root.get("reportedOn")));
问题内容: 我有一个包含4列的表格:项目,年份,月份,金额。Amount的某些值是null,当发生这种情况时,我想用以前的非null的Amount值来填充这些值。当只有一个空值时,我可以使用LAG函数轻松地做到这一点,但是当连续有多个空值时,我不确定如何处理它。以下是该表的外观示例,其中添加了要在查询中添加的内容的列: 我有两个想法,我似乎无法投入工作来实现自己想要的东西。首先,我要使用LAG,但
问题内容: 我最近获得了最新版本的Hibernate,并且注意到我的UserTypes现在有警告,关于不赞成AbstractStandardBasicType的nullSafeGet(ResultSet,String)和nullSafeSet(PreparedStatement,T,int)方法,建议使用带有SessionImplementor参数的相应方法。问题在于,当您实现UserType时,
我想为一个类似跳棋的游戏实现一个人工智能 我写了以下方法: -方法 这将返回所有按重量排序的有效移动的列表,其中重量是根据移动的类型和位置计算的 -方法 将移动应用于棋盘,如果有棋子被杀则返回1 -方法 以恢复板的先前状态。 这是一个零和游戏,所以人工智能应该最大化玩家颜色的棋子,最小化对手的棋子。 为此,最好的方法似乎是使用最小-最大和α-β修剪。这有以下伪码 但我还没有明白如何适应我的问题。有
我正在编写一个Tomcat应用程序,它充当一些内部服务的代理。 我已经将Spring项目从基于XML和注释的混合配置切换到基于Java和注释的配置。 根身份验证筛选器的代码: 在我的控制器中,是正确的(不是null)。 我遵循了你所有的指示2。但现在我得到了一个例外:
我有一个react登录页面,里面有所有的东西(丢失密码、验证电子邮件、重新发送密码等)。然而,我想知道登录后的“最佳实践”应该是什么。 我的反应组件在正确输入用户名/密码后检索“成功”。但是我应该使用反应路由器将我的用户引导到另一个位置(并“输入”一个新的反应应用程序从这里处理事情,或者你们会怎么做?我使用PHP与反应(axios)。我想到了创建一个会话并启动一个新的响应应用程序(在另一个位置)-
本文向大家介绍Python 实现使用空值进行赋值 None,包括了Python 实现使用空值进行赋值 None的使用技巧和注意事项,需要的朋友参考一下 0.摘要 在Python中,尤其是数组当中,对于一些异常值往往需要进行特殊处理。为了防止异常值与正常数据混淆,影响最终计算结果,常用的方法是将异常值置零或者置空。置零的方法较为简单,本文主要介绍如果对python中的数据进行置空。 1.赋值为Non