当前位置: 首页 > 知识库问答 >
问题:

带字符串值的QueryDSL-case表达式

贺善
2023-03-14

QueryDsl 3.3.4
Hibernate 3.6.10-Final I有两个实体:

public class Document {
    private Confirmation confirmation;
}

public class Confirmation {
    ...
}
SELECT count(d.id), CASE WHEN d.confirmation_id IS NULL then 'NOT_CONFIRMED' else 'CONFIRMED' END as confirmed FROM document d GROUP BY confirmed;
StringExpression confirmExp = new CaseBuilder()
    .when(Expressions.booleanTemplate("confirmation_id is null"))
    .then(Expressions.stringTemplate("NOT_CONFIRMED"))
    .otherwise(Expressions.stringTemplate("CONFIRMED"));

org.hibernate.hql.ast.tree.SelectClause.InitializeExplicitSelectClause(SelectClause.java:156)

共有1个答案

符佐
2023-03-14

如果想要查询中的字符串文本,则需要将其编写为

StringExpression confirmExp = new CaseBuilder()
    .when(Expressions.booleanTemplate("confirmation_id is null"))
    .then(Expressions.stringTemplate("'NOT_CONFIRMED'"))
    .otherwise(Expressions.stringTemplate("'CONFIRMED'"));

StringTemplate并不意味着参数被序列化为字符串文本,而是表示创建的表达式为java.lang.String类型。

 类似资料:
  • 我目前正在学习Haskell,突然遇到了这个表达式。 我的直觉是,由于用0除法,这将导致运行时错误,但从测试来看,情况并非如此。 我的结论是,这一定是由于Haskell内部的懒惰评估。因为匹配任何东西,所以它不会检查它与什么比较? 所以,如果有人能告诉我这个评估是否正确,如果不正确,为什么。另外,请详细说明在不实际查看表达式的情况下,案例行可以匹配的前提。

  • 我是cucumber自动化测试的新手,我有一个maven项目,我试图传递一个字符串,但我有这个错误。

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 问题内容: 我有一个表,该表的列为’Faktor’(varchar(50)),其中包含以下表达式: 不,我正在寻找一种执行选择的方式 它应该返回带有值的十进制类型的列 问题答案: 我会选择CLR,类似这样(它具有在基于SET的操作中工作的优势,而动态sql替代项(即Abduls答案)则不会): 编辑: CLR dll(Visual Studio 2008)的源代码发布在这里:http : //ww

  • 问题内容: 我有以下显示这种格式的文件名: 我想提取第二个下划线之后和之前的中间两个时间戳部分。因此,我使用了以下Python正则表达式字符串拆分: 但这在返回的列表中给了我两个额外的空字符串: 如何仅获取两个时间戳信息?即我想要: 问题答案: 不要使用,使用正则表达式/对象的方法。 您甚至可以命名捕获组并在字典中检索它们,尽管您使用的不是。(这种情况下的regex模式将类似于)