如何使用 QueryDSL 在查询中使用 SAMPLE 关键字
Posted
技术标签:
【中文标题】如何使用 QueryDSL 在查询中使用 SAMPLE 关键字【英文标题】:How to use SAMPLE Keyword in query using QueryDSL 【发布时间】:2020-07-17 12:12:59 【问题描述】:sample_clause
sample_clause 允许您指示数据库从表中的随机数据样本中进行选择,而不是从整个表中进行选择。
我想使用 QueryDSL 在查询下方运行
sample_clause
sample_clause 允许您指示数据库从表中的随机数据样本中进行选择,而不是从整个表中进行选择。
从Test t SAMPLE(80)中选择WHERE t.test_id=01 and t.test_suite_id=02;
条件是动态的,我使用 queryDSL 生成它,但是我不知道如何添加 SAMPLE 关键字来查询 DSL。
public Long getCount(TestDTO testDTO)
JPAQuery<Tuple> query = new JPAQuery<>(entityManager);
QTest qTest=QTest.test;
//dynamic where condition.
OptionalBooleanBuilder where = buildCondition(testDTO);
List<BigDecimal> output=query
.select(qTest.testId)
.from(qTest)
.where(where.build()).fetch();
//finally return the output.
【问题讨论】:
【参考方案1】:SAMPLE
是数据库方言特定功能,在 JPA 的查询语言 JPQL 中不可用。因此,您需要使用 ORM 实现为您的方言注册一个自定义函数。您可以使用custom functions 自己注册这些函数。
但是,在此之后,这些功能仍然无法在 QueryDSL 中访问。为此,您必须实现自定义Operation
实现并将其与JPQLTemplates
子类中的“模板”相关联。或者,您可以创建一个 TemplateExpression
内联:Expressions.template(Integer.class, "SAMPLE(0)", arg1)
。
【讨论】:
以上是关于如何使用 QueryDSL 在查询中使用 SAMPLE 关键字的主要内容,如果未能解决你的问题,请参考以下文章