休眠 HQL 问题,期望 IDENT 发现“*”

2022-09-02 19:14:47

我需要从相对表中获取所有数据,所以我使用这样的东西(我会在sql中使用它)

    private static final String SELECT_OOPR_TO_SEND = "SELECT R.* " +
                                                      "FROM offerOrderProjectRel R, offerOrder O, project P " +
                                                      "WHERE P.id = R.project_id and O.id = R.offer_order_id " +
                                                      "and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')" ;
; 
    

    @SuppressWarnings("unchecked")
    public List<OfferOrderProjectRel> findAllOfferOrderToSendToSalesmans() {
        Query q = getSession().createQuery(SELECT_OOPR_TO_SEND);
        List<OfferOrderProjectRel> list = q.list();
        return list;
    }

在缓存此代码后,我收到该错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: expecting IDENT, found '**' 靠近第 1 行, 列 10 [SELECT R.* FROM offerOrderProjectRel R, offerOrder O, project P WHERE P.id = R.project_id and O.id = R.offer_order_id,O.type = 'ORDER' 和 (P.status = 'PENDING' or P.status ='PROTECTED')]

那么如何从处于休眠状态的列R中获取所有数据呢?


答案 1

方法 createQuery 需要一个 HQL 查询字符串。

HQL 是一种面向对象的查询语言

HQL 解释为选择对象 的成员字段 。SELECT R.**R

但不是 的成员字段。是吗?。。*R

要选择所有使用的成员字段:R

SELECT R
FROM offerOrderProjectRel R, offerOrder O, project P
WHERE P.id = R.project_id and O.id = R.offer_order_id
and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')

答案 2

你使用SQL查询,而不是hql查询,所以它应该是

Query q = getSession().createSQLQuery(SELECT_OOPR_TO_SEND);

推荐