18

我需要从相关表中获取所有数据,所以我使用这样的东西(我会在 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:期待 IDENT,在第 1 行第 10 列附近找到“**”[SELECT R.* FROM offerOrderProjectRel R,offerOrder O,项目 P WHERE P.id = R.project_id 和 O .id = R.offer_order_id and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')]

那么如何使用休眠模式从 R 列获取所有数据?

4

3 回答 3

47

该方法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')
于 2014-02-27T13:27:29.200 回答
7

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

Query q = getSession().createSQLQuery(SELECT_OOPR_TO_SEND);
于 2013-10-22T22:28:25.147 回答
2

对于在使用时收到“期望 IDENT 发现“*””错误org.springframework.data.jpa.repository.Query并发现此问题的人,我将添加您可以将nativeQuery标志更改为true

@Query(value = "SELECT * FROM table1", nativeQuery = true)
List<Object> myFindAll();
于 2020-06-01T13:47:59.540 回答