Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Criteria API-使用asc/desc在字段上排序,多个列已断开_Hibernate_Sql Order By_Criteria Api - Fatal编程技术网

Hibernate Criteria API-使用asc/desc在字段上排序,多个列已断开

Hibernate Criteria API-使用asc/desc在字段上排序,多个列已断开,hibernate,sql-order-by,criteria-api,Hibernate,Sql Order By,Criteria Api,在hibernate字段上执行select with order by时(该字段在数据库中保留为两列),由于asc和desc不能正常工作,因此顺序被中断 字段定义示例: @Columns(columns = {@Column(name = "currency"), @Column(name = "value")}) private BigMoney price; 在此字段上使用order by执行选择时,criteria api会创建如下hql: select * from SOMETABLE

在hibernate字段上执行select with order by时(该字段在数据库中保留为两列),由于asc和desc不能正常工作,因此顺序被中断

字段定义示例:

@Columns(columns = {@Column(name = "currency"), @Column(name = "value")})
private BigMoney price;
在此字段上使用order by执行选择时,criteria api会创建如下hql:

select * from SOMETABLE order by price desc
select * from SOMETABLE order by currency, value desc
在某种程度上,hibernate将hql转换为sql,如下所示:

select * from SOMETABLE order by price desc
select * from SOMETABLE order by currency, value desc
这是错误的。应该是

select * from SOMETABLE order by currency desc, value desc
这怎么能绕过呢?问题似乎出在org.hibernate.dialogue.dialogue::renderderByElement中:

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();
}

在那里,它需要一个表达式顺序。但在我的例子中,它传递了两个串联的表达式。

有人在几年前遇到过这个问题,但现在仍然回答:-可能是一个bug?