Hibernate Criteria API-在多列损坏的字段上按升序/降序排序

时间:2019-01-03 14:31:26

标签: hibernate sql-order-by criteria-api

当在休眠字段中使用order by进行选择时,该字段保留在具有两列的db上,由于asc和desc不能正常工作,因此排序被破坏。

示例字段定义:

@Columns(columns = {@Column(name = "currency"), @Column(name = "value")})
private BigMoney price;

在此字段上使用order by进行选择时,条件api会创建一个像这样的hql:

select * from SOMETABLE order by price desc

在某个时候,hibernate将hql转换为如下所示的sql:

select * from SOMETABLE order by currency, value desc

这是错误的。应该是

select * from SOMETABLE order by currency desc, value desc

如何绕开它?问题似乎出在org.hibernate.dialect.Dialect :: renderOrderByElement:

public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls) {
    final StringBuilder orderByElement = new StringBuilder( expression );
    if ( collation != null ) {
        orderByElement.append( " " ).append( collation );
    }
    if ( order != null ) {
        orderByElement.append( " " ).append( order );
    }
    if ( nulls != NullPrecedence.NONE ) {
        orderByElement.append( " nulls " ).append( nulls.name().toLowerCase( Locale.ROOT ) );
    }
    return orderByElement.toString();
}

在那里,它期望通过表达来获得一个顺序。但就我而言,它传递了两个串联的表达式。

0 个答案:

没有答案