Hibernate HQL问题期待IDENT找到“*”

时间:2013-10-22 14:26:34

标签: java sql hibernate

我需要从相对表中获取整个数据,所以我正在使用这样的思考(我会在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和O.type ='ORDER'和(P.status ='PENDING'或   P.status ='保护')]

那么如何通过hibernate获取R列中的所有数据呢?

3 个答案:

答案 0 :(得分:28)

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

HQL是object-oriented querying language

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')

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

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

@Query(value = "SELECT * FROM table1", nativeQuery = true)
List<Object> myFindAll();