![]() |
大力的荒野 · Pytorch保存和加载模型(load和lo ...· 8 月前 · |
![]() |
绅士的创口贴 · Rapid Identification ...· 1 年前 · |
![]() |
干练的墨镜 · 移动端使用iframe碰到的那些坑-CSDN博客· 1 年前 · |
![]() |
风度翩翩的凳子 · FAQ:如何在 Oracle ...· 1 年前 · |
在我们的应用程序中,我们使用querydsl来获取实体并将其转换为表示对象。这个表示对象有一个名为
active
的字段。这取决于实体的某个日期是在今天之前(active = false)还是在今天之后(active = true)。这样做一切都很顺利。问题出在尝试按该表达式(
QEntity.someDate > today
)排序时。这使得hibernate抛出这个错误:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: > near line 3, column 40 [select object.someField as someAlias, (object.someDate > ?1) as active, object as objectAlias
from com.example.Object object
order by object.someDate > ?1 asc]
我按如下方式创建
OrderSpecifier
:
@Override
public OrderSpecifier<?> getOrderByClause(SortKey sortKey) {
BooleanExpression expression = getBooleanPath(); // This is the expression: (object.someDate > ?1)
if (sortKey.getSortOrder() == ESortOrder.ASCENDING) {
return new OrderSpecifier(Order.ASC, expression);
return new OrderSpecifier(Order.DESC, expression);
}
我也是这样试过的:
@Override
public OrderSpecifier<?> getOrderByClause(SortKey sortKey) {
BooleanExpression expression = getBooleanPath();
if (sortKey.getSortOrder() == ESortOrder.ASCENDING) {
return new CaseBuilder().when(expression.isFalse()).then(1).otherwise(2).asc();
return new CaseBuilder().when(expression.isTrue()).then(1).otherwise(2).desc();
}
这会导致类似的错误:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: > near line 3, column 40 [select object.someField as someAlias, (object.someDate > ?1) as active, object as objectAlias
from com.example.Object object
order by case when (object.someDate > ?1 = ?2) then ?3 else 2 end asc]
最后像这样:
@Override
public OrderSpecifier<?> getOrderByClause(SortKey sortKey) {
BooleanExpression expression = getBooleanPath();
if (sortKey.getSortOrder() == ESortOrder.ASCENDING) {
return new CaseBuilder().when(expression.eq(true)).then(1).otherwise(2).asc();
return new CaseBuilder().when(expression.eq(true)).then(1).otherwise(2).desc();
}
,它抛出的错误与前面的
发布于 2019-11-29 22:44:13
通过创建如下所示的order子句修复该问题:
@Override
public OrderSpecifier<?> getOrderByClause(SortKey sortKey) {
BooleanPath path = getBooleanPath();
if (sortKey.getSortOrder() == ESortOrder.ASCENDING) {
return path.asc();
![]() |
绅士的创口贴 · Rapid Identification of Jasmine Virus H Infecting Ixora coccinea by Nanopore Metatranscriptomics - P 1 年前 |
![]() |
干练的墨镜 · 移动端使用iframe碰到的那些坑-CSDN博客 1 年前 |