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

QueryDSL中可重用的BooleanExpression

景温书
2023-03-14

我刚刚开始使用QueryDSL和Spring Data JPA。我有一个存储所有谓词的类,这样在我的服务方法中,我可以通过传入布尔表达式来调用存储库中的findAll()或findOne()。这里有一个例子:

public static BooleanExpression byCode(String code) {

  return QHeading.heading.code.eq(code);

}

服务类方法:

public Iterable<Heading> getByCode(final String code) {

  return headingRepository.findAll(byCode(code));

}

这工作得很好,但如果一个标题是另一个标题的子标题,我希望重用谓词类中的相同方法,只是将它包装在返回父标题的另一个方法中,而不是返回与布尔表达式匹配的子标题。然而,我有一点麻烦,弄清楚正确的方法来做这件事。

所以,应该是这样的:

public static BooleanExpression byCode(String code) {

  return QHeading.heading.code.eq(code);

}

public static BooleanExpression byChildCode(String code) {

  QHeading.heading.childHeadings.eq(byCode(code));

}
public Iterable<Heading> getByChildCode(final String code) {

  return headingRepository.findAll(byChildCode(code));

}

共有1个答案

濮阳和泰
2023-03-14

你要么这样做

public static BooleanExpression byCode(String code) {
    return QHeading.heading.code.eq(code);
}

public static BooleanExpression byChildCode(String code) {
    return QHeading.heading.childHeadings.any().code.eq(code);
}

或者如果您想要更多的代码重复:

private static BooleanExpression byCode(QHeading heading, String code) {
    return heading.code.eq(code);
}

public static BooleanExpression byCode(String code) {
    return byCode(QHeading.heading, code);
}

public static BooleanExpression byChildCode(String code) {
    return byCode(QHeading.heading.childHeadings.any(), code);
}
 类似资料:
  • 问题内容: 我在SpringData中使用QueryDSL。我说表,我创建了实体类, 我写了以下 服务 方法 如上所述,我评论了。如何使用 QueryDSL 在可选参数 QueryDSL 使用Spring的数据? 谢谢 :) 问题答案: 可以用作布尔表达式的动态生成器:

  • 我将QueryDSL与SpringData一起使用。我有表say,并创建了实体类say,我编写了以下服务方法 与上面一样,我注释了。如何在使用Spring数据的QueryDSL中对可选参数使用QueryDSL?

  • 我希望在QueryDSL JPA中执行此SQL请求 为了在表中找到重复的行,我应该执行这个请求。但使用QueryDSL,我无法找到编写此代码的方法。 有什么建议吗? 多谢问候,

  • 我在QueryDSL中有以下查询: 我正在尝试在主查询的子查询(字段 1 和字段 2)中引用别名字段。不幸的是,我得到这个错误: 我还尝试了以下内容: 但我得到的是相同的错误,只是“AliasedTable”而不是“field1”。 如何从outter select中引用别名字段? 先谢谢你。

  • null 类似于REST查询DSL 用于全文和结构化搜索的查询语言

  • 我有一个SQL: 这将是一个很好的功能。