必须使用JPQL查询和可选条件选择数据集-将字段值(LocalDateTime
类型)与用户指定的参数(也是LocalDateTime类型)进行比较。
首先我做了一个运行良好的代码:
return entityManager.createQuery(
"SELECT new com.******.*******.*******.****.models.dto.SomeDto " +
"(s.id, " +
"s.userId) " +
"s.persistDate) " +
"FROM Some s WHERE s.userId = :userId
AND s.persistDate >= :userDateTime", SomeDTO.class)
.setParameter("userId", userId)
.setParameter("userDateTime", userDateTime)
这段代码可以工作,但有一个问题:此条件可能存在也可能不存在-取决于应用逻辑。因此,不需要使用. setParameter注入(针对此条件),而是根据逻辑形成字符串(可能为空),然后添加到请求中:
x一个一个一个一个x一个一个二个x
但问题是,无论我如何尝试格式化userDateString变量,我都会得到一个内部服务器错误。我甚至尝试只使用文本字符串而不是变量(尝试不同的格式):
String extraCondition = (userDateString.equals("false")) ? "" :
"AND s.persistDateTime >= 2023-01-27T23:30:50";
但结果也很糟糕-内部服务器错误。
我还尝试使用. isAfter方法代替"〉="操作符,但也无济于事。
如何将LocalDateTime
值比较作为字符串注入到查询中?
1条答案
按热度按时间58wvjzkj1#
即使日期字符串可能是必要的,也可能不是必要的,您仍然可以(并且应该!)使用参数注入,而不是格式化值。
基本上,您的代码应该如下所示: