Критерии гибернации ограничение с проекцией алиса - PullRequest
0 голосов
/ 23 мая 2019

Я использую hibernate версию 3.6.10.Final и hibernate-jmx.version 3.5.6-Final. У меня есть критерии Hibernate

getCurrentSession().createCriteria(CustOrder.class)
        .createAlias("custOrderSubStatusComments", "comment")
        .setProjection(Projections.projectionList()
                .add(Projections.groupProperty("id"))
                .add(Projections.max("comment.id"))
                .add(Projections.property("comment.value"), "val")
        )
        .add(Restrictions.eq("val", haltreason)).list();

Этот код дает ошибку org.hibernate.QueryException: could not resolve property: val of: com.**.CustOrder

Но следующий код работает нормально.

getCurrentSession().createCriteria(CustOrder.class)
        .createAlias("custOrderSubStatusComments", "comment")
        .setProjection(Projections.projectionList()
                .add(Projections.groupProperty("id"))
                .add(Projections.max("comment.id"))
                .add(Projections.property("comment.value"), "val")
        )
        .addOrder(Order.asc("val")).list();

Я не понимаю, почему "val" действителен при заказе и недействителен с ограничениями.

1 Ответ

0 голосов
/ 23 мая 2019

То же самое с "обычным" SQL.

Предложение select - это то, что вы представляете в качестве результата запроса.Например, я не могу сделать следующее ...

select first_name f 
from customer
where f='hello';

Но я могу сделать ...

select first_name f 
from customer
where first_name='hello'
order by f;

Если бы вы могли, вы могли бы написать выражения, которые неимеет смысл, например ...

select age + 10 as AgePlusTen
from Person
where AgePlusTen < 70;

Если вы действительно хотите, вы можете использовать дополнительный выбор ...

select * from (
    select age + 10 as AgePlusTen
    from Person
) where AgePlusTen < 70;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...