投影规则的休眠标准限制

时间:2019-05-23 10:19:26

标签: java hibernate

我正在使用休眠版本3.6.10.Final和hibernate-jmx.version 3.5.6-最终版本。我有一个休眠条件

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 :(得分:0)

与“普通” 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;