Hibernate Criteria API - Порядок с asc / desc на поле с несколькими сломанными столбцами - PullRequest
0 голосов
/ 03 января 2019

При выполнении операции выбора с заказом в поле гибернации, которое сохраняется в БД с двумя столбцами, порядок прерывается, потому что asc и desc не работают должным образом.

Пример определения поля:

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

При выполнении выбора с заказом по этому полю критерий 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();
}

Там ожидался один порядок по выражению. Но в моем случае он передает два составных выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...